Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:如何将一列添加到数据帧中,每一行中包含其所有先前行的累积和?_R_Cumulative Sum - Fatal编程技术网

R:如何将一列添加到数据帧中,每一行中包含其所有先前行的累积和?

R:如何将一列添加到数据帧中,每一行中包含其所有先前行的累积和?,r,cumulative-sum,R,Cumulative Sum,我有一个简单的问题,但我在stackoverflow上找不到答案。也许我用错了搜索词。无论如何,这是我的问题: 我想在数据框中添加一列,每一行中都有它之前所有行的累积和。例如,我有一个数据框X,其中有列V1和V2。在本例中,示例中的V3是我希望创建的新增列: X= 我想要应用它的实际数据帧实际上要大得多(5000行)。提示或解决方案有人吗?那太好了 使用cumsum()函数可以实现这一点,但是由于您希望它跨多个列,因此需要首先获得跨行的总和。这可以通过apply()函数完成。假设我了解您在寻找什

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

我想在数据框中添加一列,每一行中都有它之前所有行的累积和。例如,我有一个数据框X,其中有列V1和V2。在本例中,示例中的V3是我希望创建的新增列:

X=

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

使用
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
>设置种子(2)
>dat dat$cumsum 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

所以搜索
累计和
r
并没有让你找到
cumsum
?在我的谷歌上测试了它,似乎这是第一次成功+1约兰:-)他的总数只超过了第2列
V2
。那么我看错了是问题,他的问题本来就不应该被问到。毫无疑问,在单个变量上应用cumsum()的例子很多。如果您的解释是正确的(看起来不正确),那么只使用
cumsum(rowSums(dat))
.true可能会更快。我经常忘记那些一次性的向量化函数,比如rowSums()
> 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