我在R中有一個隨機矩陣,即M1定義如下
M1<-matrix(1:20,nrow=4,ncol=5)
> M1
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
我想根據以下約束創建第二個。每行必須包含減去前一點的行總和。每行的含義元素 (1,1) = 45、(1,2)=44、(1,3)=39 等。但我想在一個回圈中制作它,所以每次有人更改矩陣(及其維度)時,代碼都能夠計算相應的矩陣。最終的矩陣,稱為M2必須是那種形式
> M2
[,1] [,2] [,3] [,4] [,5]
[1,] 45 44 39 30 17
[2,] 50 48 42 32 18
[3,] 55 52 45 34 19
[4,] 60 56 48 36 20
如何定義回圈以計算它?
uj5u.com熱心網友回復:
有可以使用的rowCumsums功能matrixStats
library(matrixStats)
ind <- ncol(M1):1
rowCumsums(M1[, ind])[, ind]
-輸出
[,1] [,2] [,3] [,4] [,5]
[1,] 45 44 39 30 17
[2,] 50 48 42 32 18
[3,] 55 52 45 34 19
[4,] 60 56 48 36 20
或者可以使用revcumsumfromspatstat.utils
library(spatstat.utils)
t(apply(M1, 1, revcumsum))
-輸出
[,1] [,2] [,3] [,4] [,5]
[1,] 45 44 39 30 17
[2,] 50 48 42 32 18
[3,] 55 52 45 34 19
[4,] 60 56 48 36 20
uj5u.com熱心網友回復:
一些基本 R 選項
> rowSums(M1) - cbind(0, do.call(cbind, Reduce(` `, as.data.frame(M1)[-ncol(M1)], accumulate = TRUE)))
[,1] [,2] [,3] [,4] [,5]
[1,] 45 44 39 30 17
[2,] 50 48 42 32 18
[3,] 55 52 45 34 19
[4,] 60 56 48 36 20
要么
> t(apply(M1, 1, function(v) sum(v) - head(cumsum(c(0, v)), -1)))
[,1] [,2] [,3] [,4] [,5]
[1,] 45 44 39 30 17
[2,] 50 48 42 32 18
[3,] 55 52 45 34 19
[4,] 60 56 48 36 20
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/438422.html
