【发布时间】:2019-04-18 14:37:50
【问题描述】:
我有一个数据框(或向量?)
x <- data.frame(a=c("A_B_D", "B_C"))
我想通过“_”的第一个实例将x$a中的向量分成两个新列来获取
x$b
[1] "A" "B_D"
和
x$c
[2] "B" "C"
我尝试了 gsub 的变体,但无法找到解决方案。
【问题讨论】:
我有一个数据框(或向量?)
x <- data.frame(a=c("A_B_D", "B_C"))
我想通过“_”的第一个实例将x$a中的向量分成两个新列来获取
x$b
[1] "A" "B_D"
和
x$c
[2] "B" "C"
我尝试了 gsub 的变体,但无法找到解决方案。
【问题讨论】:
另一种选择可能是使用tidyr::separate:
separate(x,a,into = c("b","c"),sep = "_",remove = FALSE,extra = "merge")
【讨论】:
一个想法是用另一个分隔符替换第一个 _ 并在新分隔符上拆分。这是因为使用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
【讨论】: