【发布时间】:2017-12-20 09:05:08
【问题描述】:
这是我的数据示例
> d
customer date revenue
1: A 2016-01-01 32
2: A 2016-01-03 88
3: A 2016-01-04 80
4: A 2016-02-01 38
5: B 2016-01-13 44
6: B 2016-01-24 11
7: B 2016-01-25 50
8: B 2016-02-26 46
> dput(d)
structure(list(customer = c("A", "A", "A", "A", "B", "B", "B",
"B"), date = structure(c(16801, 16803, 16804, 16832, 16813, 16824,
16825, 16857), class = "Date"), revenue = c(32, 88, 80, 38, 44,
11, 50, 46)), .Names = c("customer", "date", "revenue"), row.names = c(NA,
-8L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x0000000002a60788>)
我想做的是,我想创建一个列,我们称之为roll_sum_3days。 此列是之后发生的收入的滚动总和。窗口大小取决于日期列。在这种情况下,roll_sum_3days 是之后发生的收入总和,不得迟于 3 天。
预期的结果是这样的
customer date revenue roll_sum_3days
1: A 2016-01-01 32 168
2: A 2016-01-03 88 80
3: A 2016-01-04 80 0
4: A 2016-02-01 38 0
5: B 2016-01-13 44 0
6: B 2016-01-24 11 96
7: B 2016-01-25 50 46
8: B 2016-01-26 46 0
【问题讨论】:
-
不清楚你的意思。也许分解你的总和(为什么是 113?,为什么是 97?...)。另外,窗口大小如何以日期为条件?
-
@Sotos 我的错,我打错了号码。刚刚编辑了帖子。所以具体的例子是,让我们看看客户 A 的第一行,168 来自 88+80,因为 2016-01-03 和 2016-01-04 是在 2016-01-01 之后的 3 天内,而 2016-02-01 是不是
-
@Sotos 也是,我的英语还不是很完美,所以标题建议非常受欢迎:)
-
那么如果
2016-02-01不在3天之内,那你为什么要在前80天加上呢? -
最后三个滚动总和值应为
50, 0, 0,因为最后一行的日期不在前两行的三天内。
标签: r dataframe data.table