2015-11-01 25 views
0

说,我有一个数组Cumsum沿着阵列中的一个维度

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 

余额递减样本(说明为什么 “cumsum()” 是没有预料到的答案):

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

感谢

回答

1

你可以尝试类似

apply(a,2,cumsum) 
列数之和为

t(apply(a,1,cumsum)) 

用于行。你需要t(),因为形状在其他方面是错误的。

+0

cumsum()将不会为余额递减工作(参见示例2) – szeta

+0

遗憾,没有看到。你能不能倒转索引,例如吨(应用(A [5:1],1,密友))[5:1]。有点混乱,但可能工作? – drw

+0

或者't(apply(a,1,function(x)rev(cumsum(x))))' – user20650

0

对于cumsum():

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

对于顺序:

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

这可以工作,但仍然会涉及每个维度的循环(我只在这里显示两个,而实际上更多)。我正在寻找一个没有显式循环/应用的矢量化的数组操作。 – szeta

相关问题