R má řadu rychlých a elegantních způsobů, jak spojit datové rámce pomocí společného sloupce. Chtěl bych vám ukázat tři z nich:
- základny R.
spojit()
funkce, - dplyr's join family of functions, and
- syntaxe závorky datové tabulky.
Získejte a importujte data
V tomto příkladu použiji jeden z mých oblíbených ukázkových datových souborů - doby zpoždění letu z amerického statistického úřadu pro dopravu. Pokud chcete pokračovat, přejděte na //bit.ly/USFlightDelays a stáhněte si data pro časový rámec podle vašeho výběru se sloupci Datum letu, Reporting_Airline, Původ, Destinace, a DepartureDelayMinutes. Získejte také vyhledávací tabulku pro Reporting_Airline.
Nebo si stáhněte tyto dvě datové sady - plus můj R kód v jednom souboru a PowerPoint vysvětlující různé typy sloučení dat - zde:
stáhněte si Code, data a PowerPoint, jak sloučit data v R Zahrnuje několik datových souborů, PowerPoint a R skript k článku. Sharon MachlisChcete-li číst v souboru se základnou R, nejprve bych rozbalil soubor zpoždění letu a poté importoval data zpoždění letu a soubor vyhledávání kódu pomocí read.csv ()
. Pokud spouštíte kód, stažený soubor zpoždění bude mít pravděpodobně jiný název než v kódu níže. Všimněte si také neobvyklosti vyhledávacího souboru .csv_
rozšíření.
rozbalit ("673598238_T_ONTIME_REPORTING.zip")mydf <- read.csv ("673598238_T_ONTIME_REPORTING.csv",
sep = ",", quote = "\" ")
mylookup <- read.csv ("L_UNIQUE_CARRIERS.csv_",
quote = "\" ", sep =", ")
Dále se podívám na oba soubory s hlava()
:
head (mydf) FL_DATE OP_UNIQUE_CARRIER ORIGIN DEST DEP_DELAY_NEW X 1 2019-08-01 DL ATL DFW 31 NA 2 2019-08-01 DL DFW ATL 0 NA 3 2019-08-01 DL IAH ATL 40 NA 4 2019-08-01 DL PDX SLC 0 NA 5 2019-08-01 DL SLC PDX 0 NA 6 2019-08-01 DL DTW ATL 10 NAhead (mylookup) Kód Popis 1 02Q Titan Airways 2 04Q Tradewind Aviation 3 05Q Comlux Aviation, AG 4 06Q Master Top Linhas Aereas Ltd. 5 07Q Flair Airlines Ltd. 6 09Q Swift Air, LLC d / b / a Eastern Air Lines d / b / a východní
Sloučí se základnou R.
Datový rámec mydf delay obsahuje pouze informace o letecké společnosti podle kódu. Chtěl bych přidat sloupec s názvy leteckých společností z můj výhled
. Jeden základní způsob R, jak toho dosáhnout, je s spojit()
funkce pomocí základní syntaxe sloučit (df1, df2)
. Nezáleží na pořadí datového rámce 1 a datového rámce 2, ale kterýkoli z nich je první, je považován za x a druhý je y.
Pokud sloupce, ke kterým se chcete připojit, nemají stejný název, musíte sloučit, ke kterým sloupcům se chcete připojit: od .x
pro název sloupce datového rámce x a by.y.
pro y, jako je sloučit (df1, df2, by.x = "df1ColName", by.y = "df2ColName")
.
Můžete také říct sloučení, zda chcete všechny řádky, včetně těch bez shody, nebo jen řádky, které se shodují, s argumenty all.x
a spojenec
. V tomto případě bych chtěl všechny řádky z dat zpoždění; pokud ve vyhledávací tabulce není žádný kód letecké společnosti, stále potřebuji informace. Ale nepotřebuji řádky z vyhledávací tabulky, které nejsou v datech zpoždění (existují některé kódy pro staré letecké společnosti, které tam už nelétají). Tak, all.x
se rovná SKUTEČNÝ
ale spojenec
se rovná NEPRAVDIVÉ
. Celý kód:
join_df <- sloučit (mydf, mylookup, by.x = "OP_UNIQUE_CARRIER",by.y = "Code", all.x = TRUE, all.y = FALSE)
Nový spojený datový rámec obsahuje sloupec s názvem Popis s názvem letecké společnosti na základě kódu dopravce.
head (join_df) OP_UNIQUE_CARRIER FL_DATE ORIGIN DEST DEP_DELAY_NEW X Popis 1 9E 2019-08-12 JFK SYR 0 NA Endeavour Air Inc. 2 9E 2019-08-12 TYS DTW 0 NA Endeavour Air Inc. 3 9E 2019-08-12 ORF LGA 0 NA Endeavour Air Inc. 4 9E 2019-08-13 IAH MSP 6 NA Endeavour Air Inc. 5 9E 2019-08-12 DTW JFK 58 NA Endeavour Air Inc. 6 9E 2019-08-12 SYR JFK 0 NA Endeavour Air Inc .
Připojuje se k dplyr
dplyr používá pro své funkce spojení syntaxi databáze SQL. A levé připojení znamená: Zahrnout vše nalevo (jaký byl datový rámec x v spojit()
) a všechny řádky, které se shodují z pravého (y) datového rámce. Pokud mají sloupce spojení stejný název, vše, co potřebujete, je left_join (x, y)
. Pokud nemají stejné jméno, potřebujete podle
argument, jako je left_join (x, y, by = c ("df1ColName" = "df2ColName"))
.
Všimněte si syntaxe pro podle
: Je to pojmenovaný vektor s názvy levého i pravého sloupce v uvozovkách.
Kód pro import a sloučení obou sad dat pomocí left_join ()
je níže. Začíná to načtením balíků dplyr a readr a poté načte dva soubory pomocí read_csv ()
. Při použití read_csv ()
, Nejprve nemusím soubor rozbalit.
knihovna (dplyr)knihovna (readr)
mytibble <- read_csv ("673598238_T_ONTIME_REPORTING.zip")mylookup_tibble <- read_csv ("L_UNIQUE_CARRIERS.csv_")
join_tibble <- left_join (mytibble, mylookup_tibble,autor = c ("OP_UNIQUE_CARRIER" = "Kód"))
read_csv ()
vytváří tibbles, což jsou typ datového rámce s některými dalšími funkcemi. left_join ()
spojuje dva. Podívejte se na syntaxi: V tomto případě záleží na pořadí. left_join ()
prostředek zahrnout všechny řádky nalevo nebo první datovou sadu, ale pouze řádky, které se shodují s druhou. A protože se musím připojit dvěma odlišně pojmenovanými sloupci, zahrnul jsem a podle
argument.
Na strukturu výsledku se můžeme podívat pomocí dplyr's záblesk()
funkce, což je další způsob, jak zobrazit prvních pár položek datového rámce.
glimpse (join_tibble) Pozorování: 658 461 Proměnné: 7 $ FL_DATE 01.08.2019, 01.08.2019, 01.08.2019, 01.08.2019 ... $ OP_UNIQUE_CARRIER "DL", "DL „,„ DL “,„ DL “,„ DL “,„ DL “,„ DL “,„ DL “,„ DL “,„ DL “,… $ ORIGIN„ ATL “,„ DFW “,„ IAH “,„ PDX "," SLC "," DTW "," ATL "," MSP "," JF… $ DEST "DFW", "ATL", "ATL", "SLC", "PDX", "ATL", "DTW" "," JFK "," MS… $ DEP_DELAY_NEW 31, 0, 40, 0, 0, 10, 0, 22, 0, 0, 0, 17, 5, 2, 0, 0, 8, 0,… $ X6 NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ... $ Popis "Delta Air Lines Inc.", "Delta Air Lines Inc.", " Delta Air…
Tato připojená datová sada má nyní nový sloupec s názvem letecké společnosti. Pokud používáte verzi tohoto kódu sami, pravděpodobně si všimnete, že dplyr byl mnohem rychlejší než základní R.
Dále se podívejme na superrychlý způsob připojení.