R: Comment redimensionner ma matrice par colonne




matrix matrix-multiplication (2)

Le redimensionnement des colonnes / lignes est une opération courante dans le calcul matriciel. Vous recherchez un redimensionnement des colonnes, mais je proposerai des solutions aux deux.

Redimensionnement des lignes

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, "*")

Remise à l'échelle des colonnes

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))

Ce que tu peux faire

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

J'ai une matrice d'états pathologiques states0CommercialA , où les colonnes sont des états (c'est-à-dire "pas de maladie", "maladie", "mort") et les lignes sont des cycles modèles (c'est-à-dire 1, 2, 3, 4, etc.). .

J'essaie de multiplier cela par un vecteur de coûts commercialMedExp , dans lequel chaque coût correspond à un état pathologique. J'ai essayé ce qui suit:

commercialMedExp * states0CommercialA

mais il semble que la multiplication se produise sur plusieurs colonnes plutôt que sur plusieurs lignes. Est-ce que quelqu'un pourrait m'aider avec la syntaxe correcte?


Quelque chose comme

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

devrait fonctionner tant que le nombre de colonnes dans states0CommericialA la même longueur que commercialMedExp . Si ce n'est pas le cas, vous devrez sous-définir les données. Par exemple, si les états pathologiques figurent dans les colonnes 13 à 18

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




matrix-multiplication