2015-08-26 59 views
1

我想根據其他列A將列B的連接值拆分爲單獨的行。結果將具有與B中的連接值相同的行,A的值將是複製。cSplit函數 - 在分割時保留空值

但是,在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 

你可以看到A. B中的空白值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任何選項保留空白值或acheiving此的任何其他方式。任何幫助將不勝感激。

+0

可以考慮GitHub的問題頁面上添加一個功能請求,我會看看是否有什麼可以修改,使之爲德工作在我的回答下面列出?謝謝。 – A5C1D2H2I1M1N2O1R2T1

回答

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")[] 
+0

我不認爲它爲v 1.9.5打印,可能還需要修復這個問題 –

+0

@DavidArenburg,在使用':='後可能在某處丟失了一個'[]'。 – A5C1D2H2I1M1N2O1R2T1

+0

是的,但我不確定這是否最適合將其放入源代碼中,以便有人希望保存結果而不是僅打印結果(始終處於現實生活中)。我想你可以保持原樣,只在SO答案中加上'[]'來打印結果。 –