我有一个与R中的数据表相关的问题.例如,我有这样的数据
a=data.table(c=(1:10),d=(2:11))
a[1,e:=1]
c d e
1: 1 2 1
2: 2 3 NA
3: 3 4 NA
4: 4 5 NA
5: 5 6 NA
6: 6 7 NA
7: 7 8 NA
8: 8 9 NA
9: 9 10 NA
10: 10 11 NA
Run Code Online (Sandbox Code Playgroud)
现在,我想逐行计算e的值,e的值等于(c + d)倍与前一行的e.所以数据表必须在这里逐行更新.我不想在这里运行for循环,因为它需要很长时间.你们有什么建议吗?
像这样?
a[-1, e := c + d]
a[, e := cumprod(e)]
# c d e
# 1: 1 2 1
# 2: 2 3 5
# 3: 3 4 35
# 4: 4 5 315
# 5: 5 6 3465
# 6: 6 7 45045
# 7: 7 8 675675
# 8: 8 9 11486475
# 9: 9 10 218243025
#10: 10 11 4583103525
Run Code Online (Sandbox Code Playgroud)
编辑:
这是一个使用的解决方案by.然而,这不会比写得好的for循环(例如,使用set)快.
a[1, f := 1]
a[, f := if (.GRP == 1) f
else (c + d) * a[.GRP - 1, f] , by = seq_len(nrow(a))]
Run Code Online (Sandbox Code Playgroud)
这里有一个解决方案set:
a[1, g := 1]
for (i in 2 : nrow(a)) set(a, i, "g", a[(i), c + d] * a[(i - 1), g])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |