【问题标题】:How to pivot a data frame with two columns and several observations for each group in R?如何旋转具有两列和 R 中每个组的多个观察值的数据框?
【发布时间】:2021-07-25 23:58:07
【问题描述】:

看起来使用pivot_wider() 可以轻松完成,但是这个功能似乎只适用于信息按多个变量分组的情况。这是我的数据框:

set.seed(1)
df = data.frame(group = c(rep(c(1:3), each=3)),
                value = sample(10:20, 9, replace = T))
  group value
1     1    14
2     1    14
3     1    19
4     2    15
5     2    19
6     2    16
7     3    18
8     3    14
9     3    14

而期望的输出是:

1  2  3
14 15 18
14 19 14
19 16 14

你会怎么做?

提前致谢!

编辑:我刚刚意识到不能以数字命名列。因此列名可能类似于:C1、C2、C3。

【问题讨论】:

    标签: r pivot transform reshape


    【解决方案1】:

    使用tidyverse,您需要添加一个虚拟列来告诉pivot_wider 要使用哪些行...

    df %>% group_by(group) %>% 
      mutate(id = row_number()) %>%       #adds id row numbers for each group
      pivot_wider(names_from = group) %>% 
      select(-id)                         #remove them again
    
    # A tibble: 3 x 3
        `1`   `2`   `3`
      <int> <int> <int>
    1    14    15    18
    2    14    19    14
    3    19    16    14
    

    【讨论】:

      【解决方案2】:

      尝试unstack,如下所示

      unstack(rev(df))
      

      给了

        X1 X2 X3
      1 18 10 20
      2 13 11 11
      3 16 16 20
      

      【讨论】:

        【解决方案3】:

        使用dcast

        library(data.table)
        dcast(setDT(df), rowid(group) ~ paste0("C", group))[, group := NULL][]
        

        -输出

        #   C1 C2 C3
        #1: 18 10 20
        #2: 13 11 11
        #3: 16 16 20
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-09-05
          • 1970-01-01
          • 2022-11-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多