2015-06-27 71 views
2

我試圖在列中提供值的條件總和,前提是它們共享相同的國家,年份和年齡並將總和除以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到目前爲止已經試過,但我對如何調理有效,以及如何通過民

dta %>% mutate(Variable) %>% group_by(Country,Year,Age) %>% 
summarise(ME=sum(Variable)[,"ME"], MAE=sum(Variable)[,"MAE"]) 

劃分任何幫助是極大的讚賞糊塗了!

+1

這是我不清楚你想達到的目標。也許你可以向我們提供你想要的結果? –

回答

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 
2

我不知道我完全明白你的鴻溝是什麼意思由民定值整筆,但這裏是一個簡單的解決辦法:

ddply(dta, c('Country','Year','Age'), function(d) { 
    data.frame(wsum = sum(d$Variable)/sum(d$Num)) 
}) 
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