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
这是一个简单的旋转任务,您可以使用 tidyr
的 pivot_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)
我按这样的数据分组
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 |
这是一个简单的旋转任务,您可以使用 tidyr
的 pivot_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)