如何通过字符值的第一个实例拆分数据框列

时间:2019-04-18 14:37:51

标签: r regex

我有一个数据框(或矢量?)

x <- data.frame(a=c("A_B_D", "B_C"))

我想通过第一个“ _”实例将x$a中的向量分成两列以获取

x$b 
[1] "A" "B_D"

x$c
[2] "B" "C"

我尝试了gsub的变体,但无法解决。

2 个答案:

答案 0 :(得分:2)

一个想法是用另一个定界符替换第一个_并在新的定界符上拆分。之所以可行,是因为使用sub仅替换找到的第一个定界符(而gsub替换所有定界符),即

strsplit(sub('_', ',', x$a), ',', fixed = TRUE)
#[[1]]
#[1] "A"   "B_D"

#[[2]]
#[1] "B" "C"

要在原始数据框中创建两个新列,

within(x, new <- data.frame(do.call(rbind, strsplit(sub('_', ',', x$a), ',', fixed = TRUE))))
#      a new.X1 new.X2
#1 A_B_D      A    B_D
#2   B_C      B      C

答案 1 :(得分:1)

另一种选择是使用tidyr::separate

separate(x,a,into = c("b","c"),sep = "_",remove = FALSE,extra = "merge")