我有一个类似
的矩阵> A= [ 1 2 4
> 2 3 1
> 3 1 2 ]
我希望从右到左的每一行都累积结果,如:
> A= [ 7 6 4
> 6 4 1
> 6 3 2 ]
我尝试使用Cumulative sum in a matrix中的解决方案,但是它提供了一种添加矩阵的不同方法。
答案 0 :(得分:5)
有点神奇,但是:
t(apply(A,1,function(x) rev(cumsum(rev(x)))))
做到了。
apply(A, 1, FUN)
将一个函数应用于矩阵的每一行。rev()
反转向量,cumsum()
计算累积和:我们需要rev(cumsum(rev(x)))
才能获得所需的顺序t()
是转置结果所必需的,因为apply
总是按列返回其结果,如此处(非常模糊)指出的(来自“值” ?apply
部分):如果每次调用“ FUN”都返回一个长度为“ n”的向量,则“应用” 如果“ n> 1”,则返回尺寸为“ c(n,dim(X)[MARGIN])”的数组
答案 1 :(得分:0)
您在标题中提到了data.frame
,并且有一种方法可以将Reduce
和rev
与data.frame一起使用以获得所需的结果。
A <- data.frame(c(1,2,3),c(2,3,1),c(4,1,2))
data.frame(rev(Reduce("+",rev(A),accumulate=TRUE)))
c.7..6..6. c.6..4..3. c.4..1..2.
1 7 6 4
2 6 4 1
3 6 3 2