问题描述
看起来使用 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