如何为 R 中的每个组旋转具有两列和多个观察值的数据框?

问题描述

看起来使用 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。

解决方法

尝试unstack,如下所示

unstack(rev(df))

给出

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

使用 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
,

使用 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