1
#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 对列值及其下方的所有内容求和。这是生态学生命表计算的一部分,我们将不胜感激。

4

3 回答 3

3

你可以使用rev功能:

a<- c(1,2,3,4,5)
b <- rev(cumsum(rev(a)))
cbind(a, b)
于 2020-11-18T20:57:08.217 回答
1
sum(a) - c(0, cumsum(a)[-length(a)])
# [1] 15 14 12  9  5
于 2020-11-18T21:01:03.227 回答
0

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

#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
于 2020-11-18T20:57:06.317 回答