说我有一个数组
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])
}
}
由于
答案 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)))