如何对连续较少行的列求和?

How to sum a column over successively less rows?

#Want data frame to go from this...
a<- c(1,2,3,4,5)
b<- c(0,0,0,0,0)
ab<-cbind(a,b)
print(ab)
  a b
[1,] 1 0
[2,] 2 0
[3,] 3 0
[4,] 4 0
[5,] 5 0

#to this...

     a  b
[1,] 1 15
[2,] 2 14
[3,] 3 12
[4,] 4  9
[5,] 5  5

这里发生的事情是让 b 列的第一个值成为整列的总和 (1+2+3+4+5=15)。它的列总和。

我们想要的 b 列的下一个值是除第一行 (2+3+4+5= 14) 以外所有内容的列总和

第三列应该是 (3+4+5 =12) 等等 n 行。

我试过做一个 for 循环,但是没有成功。

我一直在尝试找出一种方法来使用 R 对列值及其下方的所有内容求和。这是生态学生命周期计算的一部分,我们将不胜感激。

一种方法是使用这样的循环:

#Data
a<- c(1,2,3,4,5)
b<- c(0,0,0,0,0)
ab<-data.frame(a,b)
#Loop
for(i in 1:nrow(ab))
{
  ab$b[i] <- sum(ab$a[i:nrow(ab)])
}

输出:

ab
  a  b
1 1 15
2 2 14
3 3 12
4 4  9
5 5  5

您可以使用 rev 函数:

a<- c(1,2,3,4,5)
b <- rev(cumsum(rev(a)))
cbind(a, b)
sum(a) - c(0, cumsum(a)[-length(a)])
# [1] 15 14 12  9  5