如何在 R 中使用 dplyr 基于组和子组对行求和?
How to sum rows based on group and sub-group using dplyr in R?
我的数据框有 2 个分类变量,其中一个的层次结构比另一个低。我想使用 dplyr.
对子类别 中所有行的数值求和
提前感谢所有可以帮助我的人!
这是我开始的数据框:
transportation <- data.frame(
Country = c("A", "A", "A", "B", "B", "B"),
Mode = c("Car", "Train", "Plane", "Car", "Train", "Plane"),
Energy = c(10000, 9000, 20000, 200000, 160000, 450000)
)
这是我想要结束的数据框:
country_sum <- data.frame(
Country = c("A", "A", "A", "B", "B", "B"),
Mode = c("Car", "Train", "Plane", "Car", "Train", "Plane"),
Energy = c(10000, 9000, 20000, 200000, 160000, 450000),
country_sum = c(39000, 39000, 39000, 810000, 810000, 810000)
)
首先按 Country
分组,然后 mutate
与 sum
:
library(dplyr)
transportation %>%
group_by(Country) %>%
mutate(country_sum = sum(Energy))
Country Mode Energy country_sum
<chr> <chr> <dbl> <dbl>
1 A Car 10000 39000
2 A Train 9000 39000
3 A Plane 20000 39000
4 B Car 200000 810000
5 B Train 160000 810000
6 B Plane 450000 810000
使用 ave
.
dplyr::mutate(transportation, c_sum=ave(Energy, Country, FUN=sum))
# Country Mode Energy c_sum
# 1 A Car 10000 39000
# 2 A Train 9000 39000
# 3 A Plane 20000 39000
# 4 B Car 200000 810000
# 5 B Train 160000 810000
# 6 B Plane 450000 810000
我的数据框有 2 个分类变量,其中一个的层次结构比另一个低。我想使用 dplyr.
对子类别 中所有行的数值求和提前感谢所有可以帮助我的人!
这是我开始的数据框:
transportation <- data.frame(
Country = c("A", "A", "A", "B", "B", "B"),
Mode = c("Car", "Train", "Plane", "Car", "Train", "Plane"),
Energy = c(10000, 9000, 20000, 200000, 160000, 450000)
)
这是我想要结束的数据框:
country_sum <- data.frame(
Country = c("A", "A", "A", "B", "B", "B"),
Mode = c("Car", "Train", "Plane", "Car", "Train", "Plane"),
Energy = c(10000, 9000, 20000, 200000, 160000, 450000),
country_sum = c(39000, 39000, 39000, 810000, 810000, 810000)
)
首先按 Country
分组,然后 mutate
与 sum
:
library(dplyr)
transportation %>%
group_by(Country) %>%
mutate(country_sum = sum(Energy))
Country Mode Energy country_sum
<chr> <chr> <dbl> <dbl>
1 A Car 10000 39000
2 A Train 9000 39000
3 A Plane 20000 39000
4 B Car 200000 810000
5 B Train 160000 810000
6 B Plane 450000 810000
使用 ave
.
dplyr::mutate(transportation, c_sum=ave(Energy, Country, FUN=sum))
# Country Mode Energy c_sum
# 1 A Car 10000 39000
# 2 A Train 9000 39000
# 3 A Plane 20000 39000
# 4 B Car 200000 810000
# 5 B Train 160000 810000
# 6 B Plane 450000 810000