cSplit功能 - 分割时保持空白值

时间:2015-08-26 09:14:56

标签: r

我想将列B的连接值拆分为基于其他列A的单独行。结果将包含与B中的连接值一样多的行,其中A的值将被复制。

但是,B中也可能有空白值(要拆分的列)。 我只想保留这些记录,不要丢失A的值。下面是我的数据框。

s<- data.frame(A=c(1:3,4:6),B=c("a,b","b,c","b",rep("",2),"a,b,cd,e"))
s
A     B
1   a,b
2   b,c
3   b
4   
5   
6   a,b,cd,e

您可以在B中看到4和4的空白值。 A中的5。当我使用cSplit函数时,这些记录将被删除。

sp<-cSplit(s,"B",",",direction = "long")
sp
A  B
1  a
1  b
2  b
2  c
3  b
6  a
6  b
6 cd
6  e

但我需要结果是这样的。在B

中包含空值的行
sp
A  B
1  a
1  b
2  b
2  c
3  b
4
5
6  a
6  b
6 cd
6  e

cSplit中是否有任何选项可以保留空白值或任何其他方式来实现此目的。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

没有设置可以更改它,但您可以通过首先拆分为list然后使用listCol_l获取空白所在的NA值来解决此问题:

library(splitstackshape)
listCol_l(cSplit_l(s, "B", ",", drop = TRUE), "B_list")
##     A B_list_ul
##  1: 1         a
##  2: 1         b
##  3: 2         b
##  4: 2         c
##  5: 3         b
##  6: 4        NA
##  7: 5        NA
##  8: 6         a
##  9: 6         b
## 10: 6        cd
## 11: 6         e

如果输出未打印,您可能需要在行尾添加[],换句话说:

listCol_l(cSplit_l(s, "B", ",", drop = TRUE), "B_list")[]