Вот базовый код R, который вы можете попробовать
l <- strsplit(as.character(df1$Group),split = "-")
dfout <- setNames(data.frame(t(mapply(c, strsplit(sapply(l, `[[`,1),split = ""),lapply(l, `[[`,2)))),
c("A","B","C","Code"))
или использовать tidyr
пакет
library(tidyr)
df1 %>%
separate(Group,c("X","Code"),sep = "-") %>%
separate(X,c("A","B","C"),sep = 1:3)
такой, что
> dfout
A B C Code
1 1 1 Z 23456
2 1 2 B 10000
3 2 2 M 2000
4 1 2 M 1100
5 3 3 G 100