用 R 重塑数据

Reshaping data with R

我的数据在下面 table 结构中:

人号 |角色 |角色计数
------------------------------
1 |一个| 24
1 |乙 | 3个
2 |一个| 15
2 |乙 | 4个
2 |丙 | 7

我想重塑它,以便每个人 ID 有一行,每个不同角色(例如 A、B、C)有一列,然后每个人的角色计数作为值。使用以上数据,输出将是:

人号 |角色A |角色 B |角色C
------------------------------------
1 | 24 | 3 | 0
2 | 16 | 4 | 7

来自 Java 背景,我会对此采取迭代方法:

  1. 查找角色的所有不同值
  2. 创建一个新的 table,其中包含 PersonID 列和每个不同的角色
  3. 遍历第一个 table,获取每个人员 ID 和角色组合的角色计数,并将结果插入新的 table。

在 R 中是否有另一种方法可以在不遍历第一个 table 的情况下执行此操作?

谢谢

试试这个:

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

spread 来自 tidyr

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

尝试:

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

要使列名完全符合您的示例:

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