2016-10-03 3 views
1

Ich habe eine Matrix wie folgt aus:gewichteten rowSums einer Matrix

Ich möchte jeden Wert einer einzelnen Zeile zusammenzufassen, sondern gewichtet.

Beispiel: Gegeben eine bestimmte Zeile, würde die Summe sein:

S = x1 * loan + x2 * mortdue + x3 * value + ... 

x1, x2, x3, ... vordefinierte Werte sind.

Ich versuchte rowSums() und solche Dinge, aber ich war nicht in der Lage, herauszufinden, wie es richtig geht.

Antwort

2

Sie suchen nach einer Matrix-Vektor-Multiplikation. Wenn Sie eine Matrix zum Beispiel haben:

set.seed(0) 
A <- matrix(round(rnorm(9), 1), 3) 
#  [,1] [,2] [,3] 
#[1,] 1.3 1.3 -0.9 
#[2,] -0.3 0.4 -0.3 
#[3,] 1.3 -1.5 0.0 

Und haben Sie einen anderen Vektor x, das ist das, was man "Ponderation" genannt:

x <- round(rnorm(3), 1) 
#[1] 2.4 0.8 -0.8 

Sie tun können

drop(A %*% x) 
#[1] 4.88 -0.16 1.92 

Die drop konvertieren Sie einfach das Ergebnis einspaltigen Matrix in einen 1D-Vektor.

Sie können eine schnelle Überprüfung, um zu sehen haben das ist, was Sie wollen:

sum(A[1, ] * x) 
#[1] 4.88 

sum(A[2, ] * x) 
#[1] -0.16 

sum(A[3, ] * x) 
#[1] 1.92 

Im Vergleich mit rowSums(), können Sie auch eine solche Berechnung als „gewichtete rowSums“ denken kann.


Im Moment scheint es wahrscheinlicher, dass Sie einen Datenrahmen als eine Matrix haben. Sie können diesen Datenrahmen durch as.matrix() in eine Matrix umwandeln.