我想根据其他列A,将一列B的串联值拆分成单独的行。结果将与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中看到A中4和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中是否有任何选项来保留空白值或任何其他方式来实现这一点。任何帮助都将不胜感激。
发布于 2015-08-26 17:21:27
没有任何设置可以改变这一点,但您可以通过首先拆分成一个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")[]https://stackoverflow.com/questions/32222539
复制相似问题