ich einige Antworten auf die Matrixmultiplikation haben gesucht (zB R: matrix by vector multiplication), aber immer noch keine Antwort auf meine Frage finden:R: multiplizieren Vektor durch Matrix nach Namen
ich vier Arten von Obst zu verkaufen, mit Proeinzelteil Preise in diesem Vektor:
prices <- c(2.25, 0.42, 0.85, 1.24)
names(prices) <- c("pomegranate", "banana", "apple", "mango")
> prices
pomegranate banana apple mango
2.25 0.42 0.85 1.24
die folgende Matrix gibt die Anzahl der einzelnen Elemente an jedem Tag der Woche verkauft:
vv <- c(43, 87, 48, 90, 99, 60, 1, 62, 62, 107, 34, 10, 130, 15, 5, 124, 124, 101, 22, 104)
M <- matrix(vv, nrow=4, ncol=5, dimnames=list(c("banana", "mango", "pomegranate", "apple"), c("M", "Tu", "W", "Th", "F")))
> M
M Tu W Th F
banana 43 99 62 130 124
mango 87 60 107 15 101
pomegranate 48 1 34 5 22
apple 90 62 10 124 104
Beachten Sie, dass die Reihen der Matte rix sind in einer anderen Reihenfolge als der Preisvektor.
Ich mag für jeden Tag einen Vektor meiner Einnahmen generieren, d.h .:
> dailyrevenue
M Tu W Th F
310.44 170.93 243.72 189.85 315.22
Gibt es eine schnelle Möglichkeit, R zu sagen, jeden Preis durch seine entsprechenden Zeilennamen zu multiplizieren? Die Standardformen der Multiplikation würden davon ausgehen, dass jede Banane statt der korrekten Menge, $ 0,42, $ 2,25 kostet.
zu bekommen, was ich will, kann ich den folgenden Code verwenden:
OrderOfPrices <- order(match(names(prices), rownames(M))) # per https://stackoverflow.com/a/2117080/8436923
r.prices <- prices[OrderOfPrices]
dailyrevenue <- colSums(r.prices * M)
Ich würde auch nicht, wenn ich mit %*%
oder crossprod
(eine 1-reihige Matrix anstatt einen Vektor zurückkehrt) dagegen vermeiden könnte Aufruf der order
Funktion.