Gegeben zwei Datenrahmen a
und b
:
> a
a b c
1 -0.2246894 -1.48167912 -1.65099363
2 0.5559320 -0.87898575 -0.15634590
3 1.8469466 -0.01487524 -0.53098215
4 -0.6875051 0.23880967 0.01824621
5 -0.6735163 0.75485292 0.44154092
> b
a c
1 0.4287284 -0.3295925
2 0.5201492 0.3341251
3 -2.6355570 1.7916780
4 -1.3645337 1.3642276
5 -0.4954542 -0.6660001
Gibt es eine einfache Möglichkeit, diese zu verketten, um einen neuen Datenrahmen des folgenden Formulars zurückzugeben?
> new
a b c
1 -0.2246894 -1.48167912106676 -1.65099363
2 0.5559320 -0.878985746842256 -0.15634590
3 1.8469466 -0.0148752354840942 -0.53098215
4 -0.6875051 0.238809666690982 0.01824621
5 -0.6735163 0.754852923524198 0.44154092
6 0.4287284 NA -0.32959248
7 0.5201492 NA 0.33412510
8 -2.6355570 NA 1.79167801
9 -1.3645337 NA 1.36422764
10 -0.4954542 NA -0.66600006
Ich möchte die Datenrahmen zusammenführen, die Überschriften abgleichen und NA
Positionen im Datenrahmen einfügen, an b
denen die Überschrift fehlt.
r
dataframe
concatenation
Darren J. Fitzpatrick
quelle
quelle
merge()
? Warum funktioniert das nicht?Antworten:
Du willst "rbind".
Für rbind müssen die Datenrahmen dieselben Spalten haben.
In der ersten Zeile wird Spalte b zum Datenrahmen b hinzugefügt.
Ergebnisse
quelle
Reduce(rbind, list_of_data_frames)
sie alle zusammenfügen!rbind
aus irgendeinem seltsamen Grund von der Basis kommen: Ich haberbind.data.frame
Probieren Sie das Plyr- Paket aus:
quelle
plyr
Es ist einfach nicht sinnvoll, extrem häufige Pakete zu vermeiden, wenn sie die richtigen Werkzeuge für den Job bieten.plyr
ist ein schreckliches gemeinsames Paket.Sie können die Funktion verwenden
bind_rows(a,b)
aus der dplyr Bibliothek
quelle
cbind
(rbind
) ändert diese Funktion nicht den Typ aller Spalten (Zeilen) in,factor
wenn ein Vektor von Zeichen vorhanden ist.Hier ist eine einfache kleine Funktion, die zwei Datensätze zusammenbindet, nachdem automatisch erkannt wurde, welche Spalten in den einzelnen fehlen, und sie mit allen
NA
s hinzugefügt wurden .Aus irgendeinem Grund gibt dies bei größeren Datenmengen VIEL schneller zurück als bei Verwendung der
merge
Funktion.quelle
NA
aufdouble
in seiner Antwort. Es wäre schön, wenn der Typ der neuen Spalte der gleiche wäre wie die vorhandene Spalte im anderen Datenrahmen. Vielleicht übermode(d2[d2.add[i]]) <- mode(d1[d2.add[i]])
. Ich bin mir aber nicht sicher, ob dies der richtige Weg ist.Sie können verwenden,
rbind
aber in diesem Fall müssen Sie in beiden Tabellen die gleiche Anzahl von Spalten haben. Versuchen Sie also Folgendes:quelle