【问题标题】:R: How to add a column to a dataframe with in each row the cumulative sum of all its previous rows?R:如何将一列添加到数据框中,每行中的所有前行的累积总和?
【发布时间】:2013-05-29 19:04:45
【问题描述】:

我有一个简单的问题,但在 stackoverflow 上找不到答案。也许我使用了错误的搜索词。无论如何,这是我的问题:

我想向数据框中添加一列,其中每一行中的所有前行的累积总和。例如,我有包含 V1 和 V2 列的数据框 X。在这种情况下,示例中的 V3 是我希望创建的添加列:

X=

V1 V2  V3
1  0.5 0.5
2  2.0 2.5
3  1.9 4.4
4  0.0 4.4
5  5.1 9.5

我想要应用它的实际数据框实际上要大得多(5000 行)。提示或解决方案有人吗?会很好!

【问题讨论】:

  • 所以搜索cumulative sumr 并没有引导您找到cumsum
  • 在我的谷歌中测试过,似乎这是第一次命中。 +1 乔兰 :-)

标签: r cumulative-sum


【解决方案1】:

cumsum() 函数可以解决问题,但由于您希望它跨多列,因此您需要先获取跨行的总和。这可以通过apply() 函数来完成。假设我了解您要查找的内容,以下是一个示例:

> set.seed(2)
> dat <- data.frame(a=round(rnorm(10),2),b=round(rnorm(10),2),c=round(rnorm(10),2))
> dat$cumsum <- cumsum(apply(dat,1,sum))
> dat
       a     b     c cumsum
1  -0.90  0.42  2.09   1.61
2   0.18  0.98 -1.20   1.57
3   1.59 -0.39  1.59   4.36
4  -1.13 -1.04  1.95   4.14
5  -0.08  1.78  0.00   5.84
6   0.13 -2.31 -2.45   1.21
7   0.71  0.88  0.48   3.28
8  -0.24  0.04 -0.60   2.48
9   1.98  1.01  0.79   6.26
10 -0.14  0.43  0.29   6.84

【讨论】:

  • 他的总和只超过列V2
  • 那么我误读的是问题,他的问题一开始就不应该被问到。毫无疑问,在单个变量上应用 cumsum() 的例子很多。
  • 如果您的解释是正确的(看起来并不正确),那么使用cumsum(rowSums(dat)) 可能会更快。
  • 真的。我经常忘记那些一次性的矢量化函数,比如 rowSums()
猜你喜欢
  • 2011-06-24
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
  • 2018-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多