用 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 背景,我会对此采取迭代方法:
- 查找角色的所有不同值
- 创建一个新的 table,其中包含 PersonID 列和每个不同的角色
- 遍历第一个 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))
我的数据在下面 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 背景,我会对此采取迭代方法:
- 查找角色的所有不同值
- 创建一个新的 table,其中包含 PersonID 列和每个不同的角色
- 遍历第一个 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))