Ich möchte einen gewichteten Durchschnitt aus einem Datenrahmen erstellen und ihn zu einem anderen hinzufügen. Normalerweise mache ich das in SQL, aber ich kann in diesem Fall nicht. Das Beispiel, das ich hier gebe, ist sehr vereinfacht.Berechnung des gewichteten Durchschnitts aus einem Datenrahmen und Hinzufügen einer Spalte zu einem anderen Datenrahmen
Der erste Datenrahmen heißt Kunde. Es hat eine CustomerID-Spalte.
Customer <- data.frame(
CustomerID = sample(1:10)
)
Der zweite Datenrahmen heißt Order. Es hat vier Felder: CustomerID, Year, Weight und TotalCost.
Order <- data.frame(
CustomerID = sample(1:9, 100, replace=TRUE),
Year = sample(2014:2016, 100, replace=TRUE),
Weight = sample(1:3, 100, replace=TRUE),
TotalCost = sample(200:400, 100, replace=TRUE)
)
Ich möchte eine Spalte WeightedCost an den Kunden-Datenrahmen hinzuzufügen, die die gewichtete durchschnittliche Totalcost für den Kunden ist, berechnet Sum (Gewicht * Totalcost)/Sum (Gewicht) durch das Feld Kunden beschränkt und wo das Jahr> 2015.
Ich habe über die Customer-Tabelle geschaut, aber ich bin mir ziemlich sicher, dass es eine bessere vektorisierte Lösung gibt.
Zusätzlich (späte Bearbeitung), würde ich gerne wissen, wie dies zu implementieren, wenn das Jahr aus der Customer-Tabelle kommt, anstatt explizit definiert. Hier ist der neue Kundendatenrahmen:
c = c(1,1,2,2,3,3,4,4,5,5)
y = c(2014,2015,2014,2015,2014,2015,2014,2015,2014,2015)
Customer <- data.frame(
CustomerID = c,
Year = y
)
ich mit dem dplyr Paket nicht vertraut bin, obwohl ich es tat installieren und die Bibliothek hinzufügen. Wenn ich Ihren Code in R verbatim einfüge, wird er nicht vollständig. Es sucht nach einer anderen Codezeile. –
Ja, da war eine Klammer am Ende der Transmutationslinie - ich habe sie letzte Nacht bearbeitet, ich schätze, nachdem du sie kopiert hast? - Ich habe es einfach überprüft - sieht jetzt gut aus, tut mir leid :) – user127649
Wie würde ich das implementieren, wenn das Jahr (in diesem Fall: 2015) eine Spalte in der Customer-Tabelle wäre? –