R中data.frames之间的条件求和

R中data.frames之间的条件求和,r,dataframe,R,Dataframe,我正在将Excel中的分析迁移到R中,因为我的数据集已达到Excel的极限 在Excel中,我有一个工作表(“状态”),它执行sumifs函数,对另一个工作表(“成员”)的值求和,该工作表在“状态”中具有相同的状态/周组合 我想在R中这样做,其中“state”和“member”是data.frames。因此,对于“state”data.frames中的所有行,我想对“member”data.frames中在“state”中具有相同状态/周组合的所有行求和 数据集 state=data.frame

我正在将Excel中的分析迁移到R中,因为我的数据集已达到Excel的极限

在Excel中,我有一个工作表(“状态”),它执行sumifs函数,对另一个工作表(“成员”)的值求和,该工作表在“状态”中具有相同的状态/周组合

我想在R中这样做,其中“state”和“member”是data.frames。因此,对于“state”data.frames中的所有行,我想对“member”data.frames中在“state”中具有相同状态/周组合的所有行求和

数据集

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之间,我怎么计算总和呢

新的期望输出将是

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

更新 如果您需要获得介于20和40之间的“值”的总和

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

这非常有帮助。非常感谢。@SFuj没问题。很高兴能帮助你。但是,我在问这个问题时可能把我的问题过于简单化了。如果对于同一个问题,我想要相同的金额,但是在排周的几周或之前?很抱歉,如果我不清楚,我已经编辑了这篇文章。主要是,我的问题是如何处理这个问题和你们解释的一样,但对于包括不平等在内的多种情况,真是太棒了。再次感谢你们。
 library(data.table)#v1.9.5+
 setDT(member)[, list(total=sum(value)), list(state, week)]
setDT(member)[, sum(value[between(value,20,40)]) ,list(state, week)]