2016-11-22 38 views
-3

我有數據在下面的表結構重塑數據:其中R

 
Person ID | Role | Role Count 
----------------------------- 
1   | A | 24 
1   | B | 3 
2   | A | 15 
2   | B | 4 
2   | C | 7 

我想重塑這使得存在每個人ID,A爲每個不同的角色列一列(例如甲,B,C),然後將每個人的角色計數作爲值。使用上面的數據輸出將是:

 
Person ID | Role A | Role B | Role C 
------------------------------------- 
1   | 24 | 3 | 0 
2   | 16 | 4 | 7 

從Java背景的我會採取迭代的方法來這樣:

  1. 查找角色
  2. 所有不同值創建一個新表PersonID和每個不同角色的列
  3. 遍歷第一個表,獲取每個Person ID和Role組合的角色計數並將結果插入到新表中。

有R中這樣做,而不通過第一臺迭代的另一種方式?

感謝

回答

2

嘗試:

library(tidyr) 
df %>% spread(Role, `Role Count`) 

爲了使列吶mes完全按照您的示例:

df2 <- df %>% spread(Role, `Role Count`) 
names(df2) <- paste('Role', names(df2)) 
+0

工作完美!愛R這個。 – JimS

0

試試這個:從

library(reshape2) 
df <- dcast(df, PersonID~Role, value.var='RoleCount') 
df[is.na(df)] <- 0 
names(df)[-1] <- paste('Role', names(df[-1])) 
df 

    PersonID  Role A  Role B  Role C  
1  1   24   3   0 
2  2   15   4   7 
+0

三個很好的解決方案! – 2016-11-28 20:59:42

0

隨着spreadtidyr

library(tidyr) 
spread(data, Role, `Role Count`, sep = " ")