我正在寻求帮助,我可以将复杂名称列拆分为2列,用于名字和姓氏。
df <- data.frame( PREFIX=c("A_B","A_C","A_D","B_A","A_B_C","B_D_E","C_B_A","B_A"),
VALUE=c(1,2,3,4,5,6,7,8) )
以下内容产生了任务的第一部分,但是当我对剩余字符串有不同的模式时,我无法弄清楚如何选择最后一个元素
# split PREFIX into new columns
df$name1 = as.character(lapply(strsplit(as.character(df$PREFIX), split="_"), "[", 1))
答案 0 :(得分:6)
您可以使用tail
获取最后一个元素:
df$name2 = as.character(lapply(strsplit(as.character(df$PREFIX), split="_"),
tail, n=1))
df
# PREFIX VALUE name1 name2
# 1 A_B 1 A B
# 2 A_C 2 A C
# 3 A_D 3 A D
# 4 B_A 4 B A
# 5 A_B_C 5 A C
# 6 B_D_E 6 B E
# 7 C_B_A 7 C A
# 8 B_A 8 B A
答案 1 :(得分:1)
您还可以使用“贪婪”的正则表达式:
cbind(df, do.call(rbind, strsplit(as.character(df$PREFIX), "_|_.*_")))
# PREFIX VALUE 1 2
# 1 A_B 1 A B
# 2 A_C 2 A C
# 3 A_D 3 A D
# 4 B_A 4 B A
# 5 A_B_C 5 A C
# 6 B_D_E 6 B E
# 7 C_B_A 7 C A
# 8 B_A 8 B A