【问题标题】:Summing over all previous rows in large column efficiently有效地对大列中的所有先前行求和
【发布时间】:2017-04-15 16:03:10
【问题描述】:

我有一个大型数据集(>100,000 行),并想创建一个新列来汇总另一列的所有先前值。

对于具有 100,000 行和 2 列的模拟数据集 test.data,我创建了一个新向量,它将第 2 列的内容与:

sapply(1:100000, function(x) sum(test.data[1:x[1],2]))

我稍后用cbind()将此向量附加到test.table,但这太慢了。有没有更快的方法来实现这一点,或者能够引用 sapply 在 sapply 中生成的向量,这样我就可以更新累积和而不是再次执行整个计算?

【问题讨论】:

  • 你尝试过 merge()
  • 你考虑过直接使用 cumsum 创建它吗?
  • 类似test.data$sum <- cumsum(test.data[,2])?
  • @MikeH。这样可行!非常感谢。

标签: r


【解决方案1】:

根据我上面的评论,如果您进行直接分配并使用 cumsum 而不是 sapply 会更快(cumsum 是专门为您想做的事情而构建的)。

这应该可行:

test.data$sum <- cumsum(test.data[, 2])

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 2022-10-05
    • 2019-09-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    相关资源
    最近更新 更多