复制Excel SUMIFS公式

时间:2014-12-09 00:02:50

标签: r aggregate-functions sumifs

我需要复制 - 或至少找到替代解决方案 - 用于Excel中的SUMIFS功能。

我有一个交易数据库:

SegNbr  Index   Revenue SUMIF
A         1       10     30
A         1       20     30
A         2       30     100
A         2       40     100
B         1       50     110
B         1       60     110
B         3       70     260
B         3       80     260

我需要创建另一个列,按行SegmentNumber对所有等于或小于该行中索引的索引求和。这是一个扭曲的滚动收入,因为每个SegmentNumber / Index键都是相同的。这是一个公式:

=SUMIFS([Revenue],[SegNbr],[@SegNbr],[Index],"<="&[@Index])

1 个答案:

答案 0 :(得分:1)

假设您有此示例data.frame

dd<-read.table(text="SegNbr  Index   Revenue
A         1       10
A         1       20
A         2       30
A         2       40
B         1       50
B         1       60
B         3       70
B         3       80", header=T)

现在,如果我们确保按段和索引排序数据,我们可以

dd<-dd[order(dd$SegNbr, dd$Index), ]  #sort data
dd$OUT<-with(dd, 
    ave(
        ave(Revenue, SegNbr, FUN=cumsum),  #get running sum per seg
        interaction(SegNbr, Index, drop=T), 
    FUN=max, na.rm=T) #find largest sum per index per seg
)
dd

这给出了

  SegNbr Index Revenue OUT
1      A     1      10  30
2      A     1      20  30
3      A     2      30 100
4      A     2      40 100
5      B     1      50 110
6      B     1      60 110
7      B     3      70 260
8      B     3      80 260

根据需要。