R:以其他变量的值为条件的和变量值

时间:2016-01-14 15:54:03

标签: r time-series data-manipulation recode

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

  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

我的原始数据框包含更多观察结果,这就是我不能手工完成计算的原因。

2 个答案:

答案 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))