【发布时间】:2017-11-10 18:09:33
【问题描述】:
我有一个这样的数据表:
a group
1: 1 a
2: 2 a
3: 3 a
4: 4 a
5: 5 a
6: 6 a
可以从以下代码创建示例:
structure(list(a = 1:100, group = c("a", "a", "a", "a", "a",
"a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a",
"a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a",
"a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a",
"a", "a", "a", "a", "a", "a", "b", "b", "b", "b", "b", "b", "b",
"b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b",
"b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b",
"b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b",
"b", "b", "b", "b")), .Names = c("a", "group"), row.names = c(NA,
-100L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x0000000004790788>)
对于每组中的每一行,我想:
- 在
a列中取值 - 除以
a列中的值,滞后 2 并减去 1 - 除以
a列中的值,滞后4并减去1 - 将其除以
a列中的值,滞后 6 并减去 1 - 将步骤 2-4 的结果求和并在新列中返回
所以对于第 1-6 行,我将有 NA,然后是 7/5 + 7/3 + 7/1 - 3、8/6 + 8/4 + 8/2 - 3、9/7 + 9/5 + 9/3 - 3、10/8 + 10/6 + 10/4 - 3
因此,根据第一个块中报告的表格,我想获得一个新列,例如 metric_1,它在第 10 行的值为 2.416667
请注意,a 列中的值实际上并不对应于行号,而是一些测量值。
最终输出将如下所示:
a group metric_1
1: 1 a NA
2: 2 a NA
3: 3 a NA
4: 4 a NA
5: 5 a NA
6: 6 a NA
7: 7 a 7.733333
8: 8 a 4.333333
9: 9 a 3.085714
10: 10 a 2.416667
我已经尝试了一些带有 Reduce 的版本,如果我需要对向量中的一些值求和,它就像一个冠军,但我无法对其进行调整以使我能够像这样进行除法。
【问题讨论】:
标签: r data.table aggregate rolling-sum