我有一个如下所示的数据框:
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
现在,我想在所有国家/地区创建每年“居民”的总和。 即,我的解决方案看起来像:
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
我的原始数据框包含更多观察结果,这就是我不能手工完成计算的原因。
答案 0 :(得分:0)
我们可以使用ave
按年份总和,无需外部包裹。它优于aggregate
的优势在于它不会总结,而是填写内线:
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
答案 1 :(得分:0)
使用dplyr
包,您可以执行以下操作:
library(dplyr)
df %>% group_by(year) %>% summarise(sum_inhabitants = sum(inhabitants))
如果您确实希望在该列中保留重复项并将其添加到原始数据框,请将上面的summarise
更改为mutate
,这将为您提供上面指定的确切输出。
如果您想按年份和国家/地区获取,可以执行以下操作:
df %>% group_by(year, country) %>% summarise(sum_inhabitants = sum(inhabitants))