给定条件的求和值

时间:2015-06-27 09:21:53

标签: r dplyr

我试图在列中创建值的条件总和,前提是它们共享相同的Country,Year和Age,并将整数除以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"])

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:3)

这是一个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

答案 1 :(得分:3)

使用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

答案 2 :(得分:2)

我不确定我完全理解你的意思是将整数除以Num给出的值,但这是一个简单的解决方案:

ddply(dta, c('Country','Year','Age'), function(d) {
  data.frame(wsum = sum(d$Variable)/sum(d$Num))
})