R中的data.frames的条件求和

时间:2015-04-20 15:34:25

标签: r dataframe

我正在进行迁移分析我在Excel中进行R,因为我的数据集达到了Excel的极限。

在Excel中,我有一个工作表("州")执行sumifs函数,将来自另一个工作表("成员)的值与&#34中具有相同状态/周组合的值相加;状态&#34 ;.

我想在R中执行此操作,其中" state"和"会员"是data.frames。因此,对于"状态"中的所有行data.frame,我想总结来自"成员"的所有行。在" state"。

中具有相同状态/周组合的data.frame

数据集

state=data.frame(state=c('MD','MD','MD','NY','NY','NY'), week = 1:3) 
member=data.frame(memID = 1:5, state = c('MD','MD','NY','NY','MD'),
              week = 1:3,
              value = c(24,43,34,54,33,35,33,11,42,23,14,12,42,4,23))

期望输出

state = data.frame(state=c('MD','MD','MD','NY','NY','NY'), week = 1:3, 
              total = c(80,90,70,96,15,76))

谢谢!


修改

我最初过度简化了我的例子 - sumifs还考虑了多个不等式。所以在这个例子中,使用相同的数据,如果值在20到40之间,我将如何计算总和?

新的Desired Output将是

state = data.frame(state=c('MD','MD','MD','NY','NY','NY'), week = 1:3, 
              total = c(80,33,58,0,0,34)    )
              state

1 个答案:

答案 0 :(得分:1)

尝试

 aggregate(value~state+week, member, sum)

或者

 library(data.table)#v1.9.5+
 setDT(member)[, list(total=sum(value)), list(state, week)]

更新

如果您需要sum获取'值'在20到40之间。

setDT(member)[, sum(value[between(value,20,40)]) ,list(state, week)]