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))
我有一个如下所示的数据框:
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))