【问题标题】:Structure R Dataframe from Long to Wide从长到宽的结构 R 数据帧
【发布时间】:2015-09-22 15:36:43
【问题描述】:

我有一个这样的日期框架:

long <- data.frame(subj = c(1,1,2,2,2), code = c("a", "b", "a", "d", "e"))

   subj code
 1    1    a
 2    1    b
 3    2    a
 4    2    d
 5    2    e

我似乎无法以 code 对每个 subj 重复 3 次且每个 code.n 是按时间顺序排列的代码来构造数据。

这样:

   subj code.1 code.2 code.3
 1    1      a      b   <NA>
 2    2      a      d      e

任何和所有帮助表示赞赏。

【问题讨论】:

    标签: r


    【解决方案1】:

    我们为分组列“subj”创建一个序列列,然后执行dcast。我们可以使用来自data.tabledcast。将 'data.frame' 转换为 'data.table' (setDT(long)),按 'subj' 分组,创建序列列 'new' 并使用 dcast 从 'long' 重塑为 'wide'。

    library(data.table)#v1.9.6+
    setDT(long)[, new:=paste('code', 1:.N, sep='.'), by = subj]
    dcast(long, subj~new, value.var='code')
    

    或者这可以在使用dplyr 方法创建序列列之后使用tidyr 中的spread 来完成

    library(dplyr)
    library(tidyr)
    long %>% 
        group_by(subj) %>% 
        mutate(new=paste('code', row_number(), sep='.')) %>% 
        spread(new, code)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 2022-07-28
      • 2021-12-01
      相关资源
      最近更新 更多