Ich versuche Datenrahmen bar
-foo
basierend auf einer gemeinsamen Spalte zu verbinden und halten dann die ursprüngliche Reihenfolge der Spalten in foo
:Spalte Störung in merge()
> head(foo)
city course1
1 Aalborg JEMES
2 Aarhus EM-SANF
3 Aix-en-Provence EMLE
4 Almaty IMRCEES
5 Alnarp SUFONAMA
6 Amsterdam ATOSIM
> colnames(foo)
[1] "city" "course1"
> head(bar)
code website
1 4CITIES http://www.4cities.eu/
2 ACES http://www.sams.ac.uk/aces-erasmus
3 ADVANCES http://www.socialworkadvances.org/
4 AMASE http://www.amase-master.net/
5 ARCHMAT http://www.erasmusmundus-archmat.uevora.pt/
6 ASC
http://www.master-asc.org/
> colnames(bar)
[1] "code" "website"
Die Joinspalte ist course
in foo
und code
in bar
.
test <- merge(x = foo, y = bar, by.x = "course1", by.y = "code", all.x=TRUE)[, union(names(foo), names(bar))]
Dies schlägt fehl und erzeugt die folgende Fehlermeldung: Ich habe die folgende Formel verwendet
Error in `[.data.frame`(merge(x = foo, y = bar, by.x = "course1", by.y = "code", :
undefined columns selected
ich diese Lösung here gefunden haben, aber es funktioniert nicht, obwohl keines der Spaltennamen sind dupliziert. Was könnte das Problem sein?
Ein einfacher verbinden Werke (ohne Nachbestellung), aber die Säule nach vorne kommen bringt:
> head(test)
course1 city website
1 JEMES Aalborg http://www.jemes-cisu.eu/
2 JEMES Aveiro http://www.jemes-cisu.eu/
3 JEMES Hamburg http://www.jemes-cisu.eu/
4 EM-SANF Aarhus http://www.emsanf.eu/UK/
5 EM-SANF Wageningen http://www.emsanf.eu/UK/
6 EM-SANF Debrecen http://www.emsanf.eu/UK/
Ich habe versucht, das Hinzufügen sort = F
und all.x = TRUE
zu entfernen, aber das funktioniert nicht. Das Problem ist, dass meine tatsächlichen Datenfelder viel mehr Spalten haben und mehrere Joins durchlaufen werden, so dass ich die Reihenfolge der Spalten in einer einzigen Funktion beibehalten möchte. Gibt es eine bekannte effektive Problemumgehung oder ein Paket, das die Spaltenreihenfolge in Joins beibehält?
> names(test)
[1] "course1" "city" "website"
> names(foo)
[1] "city" "course1"
> names(bar)
[1] "code" "website"
Was zeigt 'names (test)'? Was zeigt dir "union (Namen (foo), Namen (bar))"? –
hinzugefügt, dass am Ende der Post. Ich möchte einfach vermeiden, 'test <- x [c (2, 1, 3)]' jedes Mal neu zu sortieren, denn wenn ich Spalten hinzufüge, wird die Neuordnung immer mühsamer. –
würde 'dplyr :: left_join (foo, bar, by = c ("course1" = "code")) 'arbeiten? – Nate