2016-10-24 1 views
1

Ich möchte allen Spalten, die aus einem linken Join resultieren, ein Präfix hinzufügen.Präfix für alle Spalten, die sich aus left_join() mit ursprünglichen Tabellennamen ergeben

left_join() hat die Möglichkeit, ein Suffix hinzuzufügen, wenn die Namen zwischen den beiden zu verbindenden Tabellen identisch sind. Es hat jedoch keine Option, dieses Suffix immer hinzuzufügen, auch wenn sie nicht identisch benannt sind. Und es gibt keine Option, stattdessen ein Präfix hinzuzufügen.

library(dplyr) 
library(nycflights13) 
flights2 <- flights %>% select(year:day, hour, origin, dest, tailnum, carrier) 
airports2 <- airports 

result <- flights2 %>% left_join(airports2, c("dest" = "faa")) %>% head() 

Das Ergebnis:

Source: local data frame [6 x 14] 

year month day hour origin dest tailnum carrier       name 
(int) (int) (int) (dbl) (chr) (chr) (chr) (chr)       (chr) 
1 2013  1  1  5 EWR IAH N14228  UA George Bush Intercontinental 
2 2013  1  1  5 LGA IAH N24211  UA George Bush Intercontinental 
3 2013  1  1  5 JFK MIA N619AA  AA      Miami Intl 
4 2013  1  1  5 JFK BQN N804JB  B6        NA 
5 2013  1  1  5 LGA ATL N668DN  DL Hartsfield Jackson Atlanta Intl 
6 2013  1  1  5 EWR ORD N39463  UA    Chicago Ohare Intl 
Variables not shown: lat (dbl), lon (dbl), alt (int), tz (dbl), dst (chr) 

Hier ist es nicht nur möglich ist, zu wissen, aus dem Ergebnis kommen, aus der ursprünglichen Tabelle in jeder Spalte kam.

Mit diesem Präfix werden Spaltennamen zuverlässig aus Tabellennamen und den Spaltennamen von Daten berechnet, die aus einer relationalen Datenbank geladen werden. Die in R geladene und gespeicherte Datenbankstruktur und die Namenskonventionen für die relationale Datenbank werden zum Beispiel verwendet, um Primär- und Fremdschlüssel zu identifizieren. Diese werden dann verwendet, um die Joins einzurichten und später Daten von den Join-Ergebnissen abzurufen.

die Präfixe zu den ursprünglichen Tabellen hinzufügen, bevor die Durchführung der Join

In a join, how to prefix all column names with the table it came from

Antwort

2

Eine einfache Art und Weise zu diesem Zweck wäre:

Ich habe eine ähnliche Frage für mySQL, aber nicht für R gefunden

# add prefix before joining: 
names(flights2) <- paste0("flights2.", names(flights2)) 
names(airports2) <- paste0("airports2.", names(airports2)) 

# in join, use names with prefixes 
result <- flights2 %>% left_join(airports2, c("flights2.dest" = "airports2.faa")) %>% head() 

Das Ergebnis:

Source: local data frame [6 x 14] 

flights2.year flights2.month flights2.day flights2.hour flights2.origin flights2.dest 
(int)   (int)  (int)   (dbl)   (chr)   (chr) 
1   2013    1   1    5    EWR   IAH 
2   2013    1   1    5    LGA   IAH 
3   2013    1   1    5    JFK   MIA 
4   2013    1   1    5    JFK   BQN 
5   2013    1   1    5    LGA   ATL 
6   2013    1   1    5    EWR   ORD 
Variables not shown: flights2.tailnum (chr), flights2.carrier (chr), airports2.name (chr), 
airports2.lat (dbl), airports2.lon (dbl), airports2.alt (int), airports2.tz (dbl), 
airports2.dst (chr) 

Nun kann der verknüpfte Datenrahmen auf diese Weise leicht bezeichnet werden:

+1

'flights2 :: year' ist kein syntaktisch gültiger Name. Ich würde 'flights2_' oder' flights2' verwenden. – zx8754

+0

Die relationale Datenbank (FileMaker) verwendet diese Namenskonvention und deshalb wollte ich die Namen beibehalten, auch wenn sie nicht ideal für R sind. Ich habe auch Spaltennamen, die mit Unterstrichen beginnen. Können Sie ein Beispiel geben, wo es ein Problem verursachen würde oder eine Neuformatierung erforderlich wäre? Ich verwende '[['] für die Indizierung. – Bobby

+0

Da wir dplyr verwenden, versuchen Sie dieses Beispiel: 'mtcars $ col1 <- seq (nrow (mtcars)); Spaltennamen (mtcars) [12] <- "xx: yy"; mtcars%>% filter (xx :: yy> 5) ' – zx8754

Verwandte Themen