Ich möchte die Einträge von zwei Datenrahmen effizient summieren, obwohl die Datenrahmen nicht garantiert die gleichen Dimensionen oder Spaltennamen haben. Merge ist nicht das, wonach ich hier bin. Stattdessen möchte ich ein Ausgabeobjekt mit allen Zeilen- und Spaltennamen erstellen, die zu einem der hinzugefügten Datenrahmen gehören. In jeder Position dieses Ausgangs möchte ich die folgende Logik für den berechneten Wert verwenden:
Betrachten Sie als Beispiel die folgenden Eingabedatenrahmen:
%Vor%Ich möchte, dass das Endergebnis
ist %Vor%Was ich bisher gemacht habe -
bind_rows / bind_cols in dplyr kann folgendes werfen: "Fehler: Inkompatible Anzahl der Zeilen (3, erwartet 2)"
Ich habe Spaltennamen dupliziert, so dass "merge" auch nicht für meine Zwecke funktioniert - gibt aus irgendeinem Grund ein leeres df zurück.
Dies scheint wie eine Art von einfacher Zusammenführung bei gemeinsamen Spaltennamen (+ Zeilennamen) und dann eine einfache Aggregation, so würde ich das angehen
%Vor%Sind eine ziemlich einfache Basis-R-Lösung
%Vor%Zuerst würde ich mir die Namen aller Zeilen und Spalten der neuen Entität nehmen:
%Vor% Dann würde ich eine Ausgabematrix mit diesen Zeilen- und Spaltennamen konstruieren (wobei Matrixdaten für alle 0 initialisiert werden), indem df1
und df2
zu den relevanten Teilen dieser Matrix hinzugefügt werden.
Verwendung von xtabs
auf geschmolzenen / gestapelten Datenrahmen:
Ich bin nicht davon überzeugt, dass die akzeptierte (oder alternative Merge) -Methode die beste ist. Es gibt falsche Ergebnisse, wenn Sie gemeinsame Zeilen haben, sie werden verbunden und nicht summiert.
Dies kann trivial angezeigt werden, indem df2 in:
geändert wird %Vor%erwartete Ergebnisse:
%Vor%tatsächliche Ergebnisse
%Vor%Sie müssen sowohl den äußeren als auch den inneren Join kombinieren (oder Links / Rechts-Joins, alle verschmelzen = T / all = F). Oder alternativ mit plars rbind.fill:
Basis-R-Lösung
%Vor%Datentabelle Lösung
%Vor%Ich bevorzuge die Methode rbind.fill, da Sie & gt; 2 Datenrahmen mit der gleichen Syntax.