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