This would be another way to do it
library(tidyverse)
df <- data.frame(stringsAsFactors=FALSE,
ID = c(1, 2, 3, 4, 500),
Group = c("XXXXXX_MaleFR_YY", "XXXXXX_FemaleFR_YY",
"XXXXXX_FemaleFR_YY", "XXXXXX_UnknownNL_YY",
"XXXXXX_MaleNL_YY")
)
df %>%
transmute(ID = ID,
Gender = str_extract(Group, "(?<=_).+(?=[:upper:]{2}_)"),
Language = str_extract(Group, "[:upper:]{2}(?=_[:upper:]{2})"))
#> ID Gender Language
#> 1 1 Male FR
#> 2 2 Female FR
#> 3 3 Female FR
#> 4 4 Unknown NL
#> 5 500 Male NL