如何对连续较少行的列求和?
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
#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