Cumsum排除了一些行

时间:2017-12-29 00:53:54

标签: r if-statement cumsum

我有一个问题链接到: Cumsum excluding current value 如何应用除某个customer.id之外的cumsum?例如:

order id    customer id Apples  Peaches Pears   Prev_Apples
1001      J Car Ltd         1       0       0       0
1002      Som Comp        **1**     2       0       0
1003      J Car Ltd         2       0       0       1
1004      J Car Ltd         1       0       0       3
1005      Richards          0       0       1       0
1006      Richards          1       0       1       0
1007      Aldridge          0       0       1       0
1008      J Car Ltd         0       0       1       4
1010      Som Comp          1       0       0     **0**

我想应用cumsum来跟踪之前的苹果订单:

if(Fruits$customer id =='NULL'){
Prev_Apples = 0
return (Fruits$customer id)
}

但我也想从我的cumsum customer.id Som Comp中排除。对他来说,我希望prev_Apples列等于0:

{{1}}

所以我想添加这行代码:

{{1}}

但我当然得到错误: “条件有长度> 1,只使用第一个元素“

我理解为什么会收到错误,但我该如何避免错误呢?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您忘记减去App​​les列的当前值。使用代码计算prev_Apples后,以下代码应该有效。

Fruits$prev_Apples <- Fruits$prev_Apples - Fruits$Apples
Fruits[which(Fruits$customer.id == "Som Comp"), ]$prev_Apples <- 0
#   order.id customer.id Apples Peaches Pears prev_Apples
# 1     1001   J Car Ltd      1       0     0           0
# 2     1002    Som Comp      1       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
# 9     1010    Som Comp      0       1     0           0