Я новичок в R и пытаюсь написать функцию для кумулятивного суммирования ранее заказанных товаров клиентами. Я уже нашел почти подходящий пример кода на Stack Overflow, но у меня не получается модифицировать его под свои нужды.
Это код:
Fruits <- Fruits[order(Cars$order.id), ] #sort data
Fruits$prev_Apples<-with(Fruits,
ave(
ave(Apples, customer.id, FUN=cumsum), #get running sum per customer.id
interaction(customer.id, order.id, drop=T),
FUN=max, na.rm=T) #find largest sum per index per seg
)
А это кадр данных Fruits:
order.id customer.id Apples Peaches Pears
1001 J Car Ltd 1 0 0
1002 Som Comp 0 2 0
1005 Richardson 0 0 1
1004 J Car Ltd 1 0 0
1003 J Car Ltd 2 0 0
1006 Richardson 1 0 1
1007 Aldridge 0 0 1
1008 J Car Ltd 0 0 1
1010 Som Comp 0 1 0
1009 J Car Ltd 1 0 0
Вот что я хотел бы получить:
order id customer id Apples Peaches Pears Prev_Apples
1001 J Car Ltd 1 0 0 0
1002 Som Comp 0 2 0 0
1003 J Car Ltd 2 0 0 1
1004 J Car Ltd 1 0 0 3
1005 Richardson 0 0 1 0
1006 Richardson 1 0 1 0
1007 Aldridge 0 0 1 0
1008 J Car Ltd 0 0 1 4
1009 J Car Ltd 1 0 0 4
1010 Som Comp 0 1 0 0
И вот что я на самом деле получаю:
order id customer id Apples Peaches Pears Prev_Apples
1001 J Car Ltd 1 0 0 1
1002 Som Comp 0 2 0 0
1003 J Car Ltd 2 0 0 3
1004 J Car Ltd 1 0 0 4
1005 Richardson 0 0 1 0
1006 Richardson 1 0 1 1
1007 Aldridge 0 0 1 0
1008 J Car Ltd 0 0 1 4
1009 J Car Ltd 1 0 0 5
1010 Som Comp 0 1 0 0
Итак, проблема в том, что cumsum включает в себя также текущий заказ яблок, в то время как я хотел бы, чтобы он включал только предыдущие заказы. Как мне изменить код? Любой ответ будет высоко оценен.
dput()
, чтобы его можно было копировать и вставлять? (И не используйте сниппеты — они не работают с R). - person Gregor Thomas   schedule 04.12.2017cumsum
, где первый член равен 0, а последний член опущен. ПопробуйтеFUN = function(x) c(0, head(cumsum(x), -1))
- person Gregor Thomas   schedule 04.12.2017