r - 如何按顺序逐行更新

标签 r data.table sequential rolling-computation

我有一个dt:

library(data.table)

DT <- data.table(a = c(1,2,3,4,5), b = c(4,5,6,7,8), c = c("X","X","X","Y","Y") ) 

我想在每组 C 列中添加一个 d 列:

  • 第一行的值应该和b[i]一样,
  • 每个组中的倒数第二行应该是 d[i-1] + 2*b[i]

预期结果:

   a b c d
1: 1 4 X 4
2: 2 5 X 14
3: 3 6 X 26
4: 4 7 Y 7
5: 5 8 Y 23

我尝试使用诸如 shift 之类的函数,但我很难在这里动态更新行(可以这么说), 想知道有没有优雅的data.table样式解决方案?

最佳答案

我们可以使用 cumsum 并使用 [1] 减去第一行:

DT[, d := cumsum(2 * b) - b[1], .(c)][]

#>    a b c  d
#> 1: 1 4 X  4
#> 2: 2 5 X 14
#> 3: 3 6 X 26
#> 4: 4 7 Y  7
#> 5: 5 8 Y 23

关于r - 如何按顺序逐行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59995566/

相关文章:

r - 如何实现使用ctree(party包)构建的决策树的输出?

r - "summarise_at"和 "mutate_if"用于字符变量的描述性统计

javascript - 从最后一个元素开始按顺序将类添加到元素集合中

c++ - 将并行 CUDA 程序转换为顺序运行

r - 在 R 中绘制密度时的带宽

r - 整理数据 r 的变量子集求和

r - 按名称更改 data.tables 中的因子水平

r - 因子在 data.table 中的存储效率是否比字符更有效?

r - 在分组时选择日期之间具有最小时间间隔的行的有效方法

eclipse - Selenium junit 测试 - 如何按顺序在测试中运行测试?