用R
我的数据如下表所示: Person ID | Role | Role Count ----------------------------- 1 | A | 24 1 | B | 3 2 | A | 15 2 | B | 4 2 | C | 7 人员ID |角色|角色计数 ----------------------------- 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 人员ID |角色A |角色B |角色C ------------------------------------- 1 | 24 | 3 | 0 2 | 16 | 4 | 7 来自Java背景的我将采用迭代的方法来实现这一点:用R,r,reshape,R,Reshape,我的数据如下表所示: Person ID | Role | Role Count ----------------------------- 1 | A | 24 1 | B | 3 2 | A | 15 2 | B | 4 2 | C | 7 人员ID |角色|角色计数 ----------------------------- 1 | A | 24 1 | B | 3 2 | A
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
library(重塑2)
df与价差来自tidyr
library(tidyr)
spread(data, Role, `Role Count`, sep = " ")
尝试:
要使列名完全符合您的示例,请执行以下操作:
df2 <- df %>% spread(Role, `Role Count`)
names(df2) <- paste('Role', names(df2))
df2%分布(角色,`Role Count`)
名称(df2)工作完美!为此,我爱R。三个很好的解决方案!!!
df2 <- df %>% spread(Role, `Role Count`)
names(df2) <- paste('Role', names(df2))