用R重塑数据

时间:2016-11-22 10:40:23

标签: r reshape

我的数据在下表结构中:

   
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. 的所有不同值
  3. 创建一个包含PersonID列和每个不同角色的新表
  4. 遍历第一个表,获取每个人员ID和角色组合的角色计数,并将结果插入新表中。
  5. 是否有另一种方法在R中执行此操作而不迭代第一个表?

    由于

3 个答案:

答案 0 :(得分:2)

尝试:

int 21h

根据您的示例精确制作列名称:

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

答案 1 :(得分: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

答案 2 :(得分:0)

来自spread

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