我想将列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
中是否有任何选项可以保留空白值或任何其他方式来实现此目的。任何帮助将不胜感激。
答案 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")[]