Cumsum沿阵列中的一个维度

时间:2015-11-01 22:20:35

标签: r

说我有一个数组

a <- array(dim=c(2,5), dimnames=list(c(1,2),c(1:5)))
a[] <- 10

   1  2  3  4  5
1 10 10 10 10 10
2 10 10 10 10 10

并希望在一个维度上创建类似cumsum()的内容,以获得:

   1  2  3  4  5
1 10 20 30 40 50
2 10 20 30 40 50

或余额递减(累计余额):

   1  2  3  4  5
1 50 40 30 20 10
2 50 40 30 20 10

在R(矢量化)中执行此操作的正确方法是什么?

不好,但是说明性的:

for (i in 1:2) {
 for (j in 1:5) {
  b[i,j] <- sum(a[i,1:j])
 }
}

   1  2  3  4  5
1 10 20 30 40 50
2 10 20 30 40 50

余额递减样本(显示为什么&#34; cumsum()&#34;不是预期的答案):

for (i in 1:2) {
 for (j in 1:5) {
  b[i,j] <- sum(a[i,j:5])
 }
}

由于

2 个答案:

答案 0 :(得分:1)

您可以尝试类似

的内容
apply(a,2,cumsum) 

用于列总和或

t(apply(a,1,cumsum)) 

表示行。你需要t(),因为形状是错误的方式。

答案 1 :(得分:0)

对于cumsum():

b<-t(apply(a,1,cumsum))

订购:

t(apply(b,1,function(x)sort(x, decreasing=T)))