将前一行的值添加到后续行,在 R 中累积
adding value from previous row to subsequent ones, cumulatively in R
我正在尝试将上一行的最后一个值添加到后续行。例如
tmat = rbind(c(1,2,3), c(1,2,3), c(1,2,5))
tmat = as.data.frame(tmat)
tmat
V1 V2 V3
1 1 2 3
2 1 2 3
3 1 2 5
改为
V1 V2 V3
1 1 2 3
2 4 5 6
3 7 8 11
我尝试了很多方法,但我对这个有盲点。
new=list()
for(i in 2:nrow(tmat)){
new[[i]] = cumsum(tmat[i,]+tmat[i-1,3])
}
do.call(rbind, new)
感谢您的帮助。
我会使用循环,因为您需要逐步计算行...
a <- 1:3
aa <- rbind(a,a,a)
aa[3,3] <- 6
for(i in 1:(nrow(aa)-1)) {
toadd <- aa[i,ncol(aa)]
aa[i+1,] <- aa[i+1,] + aa[i, ncol(aa)]
}
aa
[,1] [,2] [,3]
a 1 2 3
a 4 5 6
a 7 8 12
作为矩阵缩减:
do.call(rbind, Reduce(function(a0, a1) (a1 + a0[3]),
split(as.matrix(tmat), seq_along(tmat)),
accumulate = T))
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 11
我正在尝试将上一行的最后一个值添加到后续行。例如
tmat = rbind(c(1,2,3), c(1,2,3), c(1,2,5))
tmat = as.data.frame(tmat)
tmat
V1 V2 V3
1 1 2 3
2 1 2 3
3 1 2 5
改为
V1 V2 V3
1 1 2 3
2 4 5 6
3 7 8 11
我尝试了很多方法,但我对这个有盲点。
new=list()
for(i in 2:nrow(tmat)){
new[[i]] = cumsum(tmat[i,]+tmat[i-1,3])
}
do.call(rbind, new)
感谢您的帮助。
我会使用循环,因为您需要逐步计算行...
a <- 1:3
aa <- rbind(a,a,a)
aa[3,3] <- 6
for(i in 1:(nrow(aa)-1)) {
toadd <- aa[i,ncol(aa)]
aa[i+1,] <- aa[i+1,] + aa[i, ncol(aa)]
}
aa
[,1] [,2] [,3]
a 1 2 3
a 4 5 6
a 7 8 12
作为矩阵缩减:
do.call(rbind, Reduce(function(a0, a1) (a1 + a0[3]),
split(as.matrix(tmat), seq_along(tmat)),
accumulate = T))
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 11