微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何为 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。