首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不含现值的Cumsum

不含现值的Cumsum
EN

Stack Overflow用户
提问于 2017-12-04 15:55:07
回答 1查看 656关注 0票数 0

我是新的R和我试图写一个函数,以累积和以前订购的项目由客户。我已经在堆栈溢出上找到了一个几乎合适的代码示例,但我无法根据我的需要对其进行相应的修改。

这是代码:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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

这是我想要得到的:

代码语言:javascript
复制
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

这就是我真正得到的:

代码语言:javascript
复制
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

所以问题是,累积和也包括目前的顺序苹果,而我希望它只包括以前的订单。我应该如何修改代码?如有任何答复,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-04 16:53:40

假设输入在注释的末尾可重复显示,我们对Fruits进行排序,修复对Cars的错误引用,然后使用avecumsum一起从cumsum中减去Apples的当前值,取消和中的最后一个值。

这与问题中所列的答案相同。

代码语言:javascript
复制
Fruits <- Fruits[order(Fruits$order.id), ]
transform(Fruits, Prev_Apples = ave(Apples, customer.id, FUN = cumsum) - Apples)

给予:

代码语言:javascript
复制
   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

注:可复制形式的输入假定为:

代码语言:javascript
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47637184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档