【问题标题】:Reshaping data with R [duplicate]用 R 重塑数据 [重复]
【发布时间】:2017-04-05 23:58:24
【问题描述】:

我的数据在下表结构中:

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

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

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

来自 Java 背景,我会采用迭代方法:

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

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

谢谢

【问题讨论】:

    标签: r reshape


    【解决方案1】:

    试试这个:

    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】:

    spread 来自tidyr

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

    【讨论】:

      【解决方案3】:

      试试:

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

      要使列名完全按照您的示例:

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

      【讨论】:

      • 完美运行!为此爱 R。
      猜你喜欢
      • 2014-11-09
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多