用R

用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

我的数据如下表所示:

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背景的我将采用迭代的方法来实现这一点:

  • 查找角色的所有不同值
  • 创建一个新表,其中包含PersonID和每个不同角色的列
  • 遍历第一个表,获取每个人员ID和角色组合的角色计数,并将结果插入到新表中
  • 在R中有没有另一种不用遍历第一个表的方法

    谢谢

    试试这个:

    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))