2016-09-26 62 views
-1

我有這樣一個數據幀:做類似的東西來熔化的R數據幀

第一列是數字,而第二列是逗號分隔的列表(字符)

id numbers 
1 2,4,5 
2 1,4,6 
3 NA 
4 NA 
5 5,1,2 

我想實質上「融化」與重塑包類似的數據幀。所以輸出是一個數據框,看起來像這樣

id numbers 
1 2 
1 4 
1 5 
2 1 
2 4 
2 6 
3 NA 
4 NA 
5 5 
5 1 
5 2 

除了在reshape2包每個號碼都必須在每一個列...如果有很多號碼這會佔用過多的存儲空間..這就是爲什麼我選擇將數字列表設置爲逗號分隔列表。但融化不再適用於此設置。

您能否推薦實現從輸入數據幀到輸出數據幀轉換的最有效方法?

+1

檢查這些問答的一些:http://stackoverflow.com/search?q=%5Br%5D+cSplit+long –

+0

像這樣的問題(http://stackoverflow.com/questions/30207500/csplit -librarysplitstackshape-always-dropping-the-column)會給你一些有用的信息。 – jazzurro

回答

-2

我會爲每一行創建一個data.frame並將它們存儲在一個列表中,其中df是您的初始data.frame。

l = list() 
for (j in 1:nrow(df)){ 
    l[[j]] = data.frame(id  = df$id[[j]], 
         numbers = split(df$numbers[[j]], ',')) 
} 

之後,您可以使用plyr :: ldply和'data.frame'選項將所有列表元素堆疊到一個data.frame中。