2014-12-09 3 views
0

Мне нужно реплицировать - или, по крайней мере, найти альтернативное решение - для функции SUMIFS, которую я имею в Excel.Репликация формулы 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

Просьба сделать [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) с образцом ввода и желаемым выходом. Являются ли индексы отсортированными (или они могут быть)? Вам действительно нужна кумулятивная сумма за сегмент? – MrFlick

+0

Индексы могут быть отсортированы. Нет, мне не нужна простая кумулятивная сумма или скользящая совокупная сумма. Это нечто среднее. Я не знаю, помогает ли это, но я использую это для создания кумулятивного распределения для каждого сегмента, и я использую доход как вес. – user3469390

ответ

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 

по желанию.

+0

Спасибо. Просто применяется к реальным данным. Работал быстро и безупречно. – user3469390

Смежные вопросы