2016-08-16 18 views
-1

列が状態(すなわち、「疾患なし」、「疾患」、「死んでいる」)であり、行がモデルサイクルである疾患状態states0CommercialAの行列を有する。 、1,2,3,4など)。R:行列を列単位で再スケールする方法

私はコストベクトルcommercialMedExpでこれを掛けようとしていますが、各コストは疾患状態に対応しています。

commercialMedExp * states0CommercialA 

をしかし、乗算が列にわたっての代わりに、行全体に発生しているかのようにそれが表示されます。私は、次の試行されてきました。誰かが正しい構文を教えてくれますか?

commercialMedExp0A <- t(apply(states0CommercialA, 1, function(x){ x * commercialMedExp})) 

よう

答えて

0

何かがそう長くstates0CommericialAの列数がcommercialMedExpと同じ長さであるように動作するはずです。そうでない場合は、データをサブセット化する必要があります。例えば、疾患状態が列13~18にある場合

commercialMedExp0A <- t(apply(states0CommercialA[,c(13:18)], 1, function(x){ x * commercialMedExp})) 
2

列/行の再スケーリングは、行列計算で一般的な操作です。あなたは列のリサイズを探していますが、私は両方に解決策を提供します。あなたは

012を行うことができますどのような

A <- matrix(1:20, nrow = 5); y <- 1:4 
## Any below method is much more efficient than `A %*% diag(y)` 

## method 1: transpose + row rescaling 
t(y * t(A)) 

## method 2: `sweep()` 
sweep(A, 2L, y, "*") 

## method 3: pairwise multiplication 
A * rep(y, each = nrow(A)) 

を再スケーリング

A <- matrix(1:20, nrow = 5); x <- 1:5 
## Any method below is much more efficient than `diag(x) %*% A` 

## method 1: recycling 
A * x 

## method 2: `sweep()` 
sweep(A, 1L, x, "*") 

列を再スケーリング


states0CommercialA * rep(commercialMedExp, each = nrow(states0CommercialA)) 
+0

あなたのコードは+、 - 、*、/、右のすべての操作に対応していますか? – alphabetagamma

関連する問題