如何使数据框中的行从右到左累积

时间:2018-09-05 13:47:13

标签: r

我有一个类似

的矩阵
> 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中的解决方案,但是它提供了一种添加矩阵的不同方法。

2 个答案:

答案 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,并且有一种方法可以将Reducerev与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