Репликация формулы Excel СУММЕСЛИМН

Мне нужно воспроизвести или, по крайней мере, найти альтернативное решение для функции СУММЕСЛИМН, которая у меня есть в Excel.

У меня есть транзакционная база данных:

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])

person user3469390    schedule 09.12.2014    source источник
comment
Сделайте воспроизводимый пример с образцом ввода и желаемым результатом. Индексы отсортированы (или могут быть)? Вам действительно нужна совокупная сумма за сегмент?   -  person MrFlick    schedule 09.12.2014
comment
Индексы можно сортировать. Нет, мне не нужна ни простая накопительная сумма, ни скользящая накопительная сумма. Это нечто среднее. Я не знаю, поможет ли это, но я использую это для создания кумулятивного распределения для каждого сегмента и использую доход как вес.   -  person user3469390    schedule 09.12.2014


Ответы (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

по желанию.

person MrFlick    schedule 09.12.2014
comment
Спасибо. Просто применительно к реальным данным. Работали быстро и безупречно. - person user3469390; 09.12.2014