我的数据在下表结构中:
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背景我会采用迭代方法:
是否有另一种方法在R中执行此操作而不迭代第一个表?
由于
答案 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 = " ")