我是新的R和我试图写一个函数,以累积和以前订购的项目由客户。我已经在堆栈溢出上找到了一个几乎合适的代码示例,但我无法根据我的需要对其进行相应的修改。
这是代码:
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
)
这是水果data.frame:
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
所以问题是,累积和也包括目前的顺序苹果,而我希望它只包括以前的订单。我应该如何修改代码?如有任何答复,将不胜感激。
发布于 2017-12-04 16:53:40
假设输入在注释的末尾可重复显示,我们对Fruits进行排序,修复对Cars的错误引用,然后使用ave与cumsum一起从cumsum中减去Apples的当前值,取消和中的最后一个值。
这与问题中所列的答案相同。
Fruits <- Fruits[order(Fruits$order.id), ]
transform(Fruits, Prev_Apples = ave(Apples, customer.id, FUN = cumsum) - Apples)给予:
order.id customer.id Apples Peaches Pears Prev_Apples
1 1001 J Car Ltd 1 0 0 0
2 1002 Som Comp 0 2 0 0
5 1003 J Car Ltd 2 0 0 1
4 1004 J Car Ltd 1 0 0 3
3 1005 Richardson 0 0 1 0
6 1006 Richardson 1 0 1 0
7 1007 Aldridge 0 0 1 0
8 1008 J Car Ltd 0 0 1 4
10 1009 J Car Ltd 1 0 0 4
9 1010 Som Comp 0 1 0 0注:可复制形式的输入假定为:
Fruits <- structure(list(order.id = c(1001L, 1002L, 1005L, 1004L, 1003L,
1006L, 1007L, 1008L, 1010L, 1009L), customer.id = structure(c(2L,
4L, 3L, 2L, 2L, 3L, 1L, 2L, 4L, 2L), .Label = c("Aldridge", "J Car Ltd",
"Richardson", "Som Comp"), class = "factor"), Apples = c(1L,
0L, 0L, 1L, 2L, 1L, 0L, 0L, 0L, 1L), Peaches = c(0L, 2L, 0L,
0L, 0L, 0L, 0L, 0L, 1L, 0L), Pears = c(0L, 0L, 1L, 0L, 0L, 1L,
1L, 1L, 0L, 0L)), .Names = c("order.id", "customer.id", "Apples",
"Peaches", "Pears"), class = "data.frame", row.names = c(NA,
-10L))https://stackoverflow.com/questions/47637184
复制相似问题