R:根据其他变量的值求和变量值

R: Sum variable values conditional on value of other variable

我有一个如下所示的数据框:

  year country inhabitants
1    1       A          15
2    2       A          10
3    3       A          24
4    1       B          76
5    2       B          69
6    3       B          58
7    1       C         120
8    2       C         131
9    3       C         128

现在,我想为所有国家/地区的每一年创建 "inhabitants" 的总和。 即,我的解决方案如下所示:

  year country inhabitants sum_inhabitants
1    1       A          15             211
2    2       A          10             210
3    3       A          21             207
4    1       B          76             211
5    2       B          69             210
6    3       B          58             207
7    1       C         120             211
8    2       C         131             210
9    3       C         128             207

我的原始数据框包含更多观察值,这就是我无法手动进行计算的原因。

我们可以使用ave按年求和,不需要外包。它相对于 aggregate 的优势在于它不会汇总而是填充 in-line:

df$sum_inhabitants <- ave(df$inhabitants, df$year, FUN=sum)
# year country inhabitants sum_inhabitants
# 1    1       A          15             211
# 2    2       A          10             210
# 3    3       A          21             207
# 4    1       B          76             211
# 5    2       B          69             210
# 6    3       B          58             207
# 7    1       C         120             211
# 8    2       C         131             210
# 9    3       C         128             207

使用 dplyr 包,你可以这样做:

library(dplyr)
df %>% group_by(year) %>% summarise(sum_inhabitants = sum(inhabitants))

如果您真的想保留该列中的重复项并将其添加到原始数据框中,请将上面的 summarise 更改为 mutate,这将为您提供上面指定的确切输出。

如果你想按年份和按国家获取,你可以这样做:

df %>% group_by(year, country) %>% summarise(sum_inhabitants = sum(inhabitants))