给定条件的总和值
Sum values given conditions
我正在尝试对一列中的值进行条件求和,前提是它们共享相同的国家/地区、年份和年龄,并将总和除以 Num 给出的值。我的数据框看起来像这样:
Country Num Year Age Variable
AU 20 1989 12 0.009
AU 20 1989 12 0.0015
AU 20 1989 13 0.008
AU 19 1990 19 0.005
USA 1 2011 55 0.0001
到目前为止,我已经尝试过使用 dplyr,但我对如何有效调节条件以及如何除以 Num
感到困惑
dta %>% mutate(Variable) %>% group_by(Country,Year,Age) %>%
summarise(ME=sum(Variable)[,"ME"], MAE=sum(Variable)[,"MAE"])
非常感谢任何帮助!
我不确定我是否完全理解您将总和除以 Num 给出的值的意思,但这里有一个简单的解决方案:
ddply(dta, c('Country','Year','Age'), function(d) {
data.frame(wsum = sum(d$Variable)/sum(d$Num))
})
这是一个 dplyr
解决方案(我猜)您正在努力实现的目标。
dat %>% group_by(Country, Year, Age) %>% mutate(ME = sum(Variable)/sum(Num))
Source: local data frame [5 x 6]
Groups: Country, Year, Age
Country Num Year Age Variable ME
1 AU 20 1989 12 0.0090 0.0002625000
2 AU 20 1989 12 0.0015 0.0002625000
3 AU 20 1989 13 0.0080 0.0004000000
4 AU 19 1990 19 0.0050 0.0002631579
5 USA 1 2011 55 0.0001 0.0001000000
使用 data.table
你可以做到这一点
library(data.table)
setDT(dat)[, ME := sum(Variable)/sum(Num), by = .(Country, Year, Age)]
#> dat
# Country Num Year Age Variable ME
#1: AU 20 1989 12 0.0090 0.0002625000
#2: AU 20 1989 12 0.0015 0.0002625000
#3: AU 20 1989 13 0.0080 0.0004000000
#4: AU 19 1990 19 0.0050 0.0002631579
#5: USA 1 2011 55 0.0001 0.0001000000
我正在尝试对一列中的值进行条件求和,前提是它们共享相同的国家/地区、年份和年龄,并将总和除以 Num 给出的值。我的数据框看起来像这样:
Country Num Year Age Variable
AU 20 1989 12 0.009
AU 20 1989 12 0.0015
AU 20 1989 13 0.008
AU 19 1990 19 0.005
USA 1 2011 55 0.0001
到目前为止,我已经尝试过使用 dplyr,但我对如何有效调节条件以及如何除以 Num
感到困惑dta %>% mutate(Variable) %>% group_by(Country,Year,Age) %>%
summarise(ME=sum(Variable)[,"ME"], MAE=sum(Variable)[,"MAE"])
非常感谢任何帮助!
我不确定我是否完全理解您将总和除以 Num 给出的值的意思,但这里有一个简单的解决方案:
ddply(dta, c('Country','Year','Age'), function(d) {
data.frame(wsum = sum(d$Variable)/sum(d$Num))
})
这是一个 dplyr
解决方案(我猜)您正在努力实现的目标。
dat %>% group_by(Country, Year, Age) %>% mutate(ME = sum(Variable)/sum(Num))
Source: local data frame [5 x 6]
Groups: Country, Year, Age
Country Num Year Age Variable ME
1 AU 20 1989 12 0.0090 0.0002625000
2 AU 20 1989 12 0.0015 0.0002625000
3 AU 20 1989 13 0.0080 0.0004000000
4 AU 19 1990 19 0.0050 0.0002631579
5 USA 1 2011 55 0.0001 0.0001000000
使用 data.table
你可以做到这一点
library(data.table)
setDT(dat)[, ME := sum(Variable)/sum(Num), by = .(Country, Year, Age)]
#> dat
# Country Num Year Age Variable ME
#1: AU 20 1989 12 0.0090 0.0002625000
#2: AU 20 1989 12 0.0015 0.0002625000
#3: AU 20 1989 13 0.0080 0.0004000000
#4: AU 19 1990 19 0.0050 0.0002631579
#5: USA 1 2011 55 0.0001 0.0001000000