R 将 group_by table 转换为新的数据框

R Convert group_by table to new data frame

我按这样的数据分组

by_cyl <- mtcars %>% group_by(cyl, gear) %>% summarise(HP = sum(hp))

我想将此 table 从

cyl gear HP
4 3
4 4 608
4 5 204
6 3 215
6 4 466
6 5 175
8 3 2330
8 5 599

以圆柱为列,以齿轮为行

4 6 8
3 97 215 2330
4 608 466 -
5 204 175 599

这是一个简单的旋转任务,您可以使用 tidyrpivot_wider() 函数

library(dplyr)
library(tidyr)

mtcars %>%
  group_by(cyl, gear) %>%
  summarise(HP = sum(hp)) %>% 
  pivot_wider(gear, names_from = "cyl", values_from = "HP")

# A tibble: 3 x 4
   gear   `4`   `6`   `8`
  <dbl> <dbl> <dbl> <dbl>
1     3    97   215  2330
2     4   608   466    NA
3     5   204   175   599

您可以在 pivot_wider -

中执行此操作
tidyr::pivot_wider(by_cyl, names_from = cyl, values_from = HP, values_fn = sum)

#   gear   `4`   `6`   `8`
#  <dbl> <dbl> <dbl> <dbl>
#1     3    97   215  2330
#2     4   608   466    NA
#3     5   204   175   599

data.table :

library(data.table)
dcast(setDT(by_cyl), gear~cyl, value.var = 'HP', fun.aggregate = sum)