2017-11-11 148 views
0

我在下面格式 Original format數據幀重塑/轉使用dplyr

對於給定的ID的數據幀;年齡,性別和地位保持不變。

我想要做的一對夫婦轉變

  1. 有每個「ID」和「類型」一行。
  2. 在「平板電腦」列中查找唯一值並進行轉置。
  3. 移調「級別」列,並具有與新轉置的平板電腦列下的每個平板電腦相對應的值。必須用「NA」填充空單元格。

下面附上所需的輸出格式以供參考。 desired format

我試過使用dcast和重塑; tidyr與dplyr使用收集和傳播,但是不能實現第三次轉換

任何幫助將是偉大的!由於

+2

這不是你的任務相當重複的,但它應該是足夠https://stackoverflow.com/questions/10589693接近。如果不是,請考慮重新發布mvce元素。 https://stackoverflow.com/help/mcve – wibeasley

回答

1

可以在tidyr包中使用該功能spread()

建立包和數據:

library(dplyr) 
library(tidyr) 


df=data.frame(
    id=c(1,1,1,1,1,2,2), 
    age=c(3,3,3,3,3,51,51), 
    sex=c('f','f','f','f','f','m','m'), 
    type=c('a','a','a','b','b','a','a'), 
    tablet=c('t1','t2','t3','t1','t5','t3','t10'), 
    level=c(1,2,3,1,4,2,3), 
    status=c('n','n','n','n','n','y','y') 
) 

使用group_by()讓你的ID和類型的結果。

使用spread()轉置數據與tablet列包含列名的鍵和level列包含值。 spread()默認填寫空格NA

使用select()重新排列列到所需的格式:

df %>% 
    group_by(id,type) %>% 
    spread(tablet, level) %>% 
    select(id,age,sex,type,t1,t2,t3,t5,t10,status) 
+0

謝謝安德魯。代碼工作接近完美。我想在一行中爲所有級別的樣本ID。現在我得到4行ID「1」和2行ID 2「。嘗試合併和合並..沒有多少運氣..終於得到它通過做一個切片「填充(一切(),。方向=」下「)%>% fill(everything(),.direction =」up「 )%>% slice(1)「..雖然性能不是很好。任何替代方案的建議? – Vinds