R má množstvo rýchlych a elegantných spôsobov, ako spojiť dátové rámce pomocou spoločného stĺpca. Rád by som vám ukázal tri z nich:
- základňa R.
zlúčiť()
funkcia, - dplyr sa pripojil k rodine funkcií a
- syntax zátvorky údajovej tabuľky.
Získajte a importujte údaje
V tomto príklade použijem jeden z mojich obľúbených súborov demo údajov - časy oneskorenia letu z amerického štatistického úradu pre dopravu. Ak chcete pokračovať, choďte na //bit.ly/USFlightDelays a so stĺpcami si stiahnite údaje pre vami zvolený časový rámec. Dátum letu, Reporting_Airline, Pôvod, Destináciaa DepartureDelayMinutes. Získajte tiež vyhľadávaciu tabuľku pre Reporting_Airline.
Alebo si stiahnite tieto dve množiny údajov - plus môj R kód do jedného súboru a PowerPoint vysvetľujúci rôzne typy zlúčenia údajov - tu:
Stiahnite si Code, Data a PowerPoint, ako zlúčiť dáta v R Zahŕňa niekoľko dátových súborov, PowerPoint a R skript, ktorý sprevádza článok. Sharon MachlisAk si chcete prečítať súbor s bázou R, najskôr by som rozbalil súbor oneskorenia letu a potom importoval údaje o oneskorení letu aj súbor na vyhľadanie kódu pomocou read.csv ()
. Ak spúšťate kód, stiahnutý súbor oneskorenia bude mať pravdepodobne iný názov ako v kóde uvedenom nižšie. Nezabudnite tiež, že vyhľadávací súbor je neobvyklý .csv_
predĺženie.
rozbaliť ("673598238_T_ONTIME_REPORTING.zip")mydf <- read.csv ("673598238_T_ONTIME_REPORTING.csv",
sep = ",", quote = "\" ")
mylookup <- read.csv ("L_UNIQUE_CARRIERS.csv_",
quote = "\" ", sep =", ")
Ďalej sa pozriem na oba súbory 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 NAhlava (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á
Zlučuje sa so základňou R
Dátový rámec oneskorenia mydf obsahuje informácie o leteckej spoločnosti iba podľa kódu. Chcel by som pridať stĺpec s názvami leteckých spoločností z môj výhľad
. Jeden základný spôsob, ako to urobiť, je zlúčiť()
pomocou základnej syntaxe zlúčiť (df1, df2)
. Nezáleží na poradí dátového rámca 1 a dátového rámca 2, ale ktorýkoľvek z nich je prvý, považuje sa za x a druhý je y.
Ak stĺpce, ku ktorým sa chcete pripojiť, nemajú rovnaký názov, musíte zlúčiť, do ktorých stĺpcov sa chcete pripojiť: od.x
pre názov stĺpca dátového rámca x a by.y
pre y, ako napr zlúčiť (df1, df2, by.x = "df1ColName", by.y = "df2ColName")
.
Môžete tiež povedať, že zlúčiť chcete, aby boli všetky riadky vrátane argumentov bez zhody alebo iba riadkov, ktoré sa zhodujú s argumentmi all.x
a all.y
. V tomto prípade by sa mi páčili všetky riadky s údajmi o oneskorení; ak vo vyhľadávacej tabuľke nie je žiadny kód leteckej spoločnosti, stále potrebujem informácie. Ale nepotrebujem riadky z vyhľadávacej tabuľky, ktoré nie sú v údajoch o meškaní (existujú staré kódy pre staré letecké spoločnosti, ktoré tam už nelietajú). Takže all.x
rovná sa PRAVDA
ale all.y
rovná sa NEPRAVDA
. Celý kód:
join_df <- zlúčiť (mydf, mylookup, by.x = "OP_UNIQUE_CARRIER",by.y = "Kód", all.x = TRUE, all.y = FALSE)
Nový spojený dátový rámec obsahuje stĺpec s názvom Popis s názvom leteckej spoločnosti na základe kódu dopravcu.
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 .
Pripája sa s dplyr
dplyr používa pre svoje funkcie spojenia syntax databázy SQL. A zľava sa pripoj znamená: Zahrňte všetko naľavo (aký bol údajový rámec x v zlúčiť()
) a všetky riadky, ktoré sa zhodujú z pravého (y) dátového rámca. Ak majú stĺpce spojenia rovnaký názov, všetko, čo potrebujete, je left_join (x, y)
. Ak nemajú rovnaké meno, potrebujete od
argument, ako napr left_join (x, y, by = c ("df1ColName" = "df2ColName"))
.
Všimnite si syntax pre od
: Je to pomenovaný vektor s názvami ľavého a pravého stĺpca v úvodzovkách.
Kód na import a zlúčenie oboch súborov údajov pomocou left_join ()
je dole. Začína to načítaním balíkov dplyr a readr a potom načíta dva súbory pomocou read_csv ()
. Pri použití read_csv ()
, Najskôr nemusím rozbaľovať súbor.
knižnica (dplyr)knižnica (čítať)
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ára tibble, ktoré sú typom dátového rámca s niektorými extra funkciami. left_join ()
spája tieto dva prvky. Zoznámte sa so syntaxou: V takom prípade záleží na poradí. left_join ()
znamená zahrňte všetky riadky vľavo alebo prvý súbor údajov, ale iba riadky, ktoré sa zhodujú s druhým. A pretože sa musím pripojiť k dvom rôzne pomenovaným stĺpcom, zahrnul som a od
argument.
Na štruktúru výsledku sa môžeme pozrieť pomocou dplyr’s záblesk ()
funkcia, čo je ďalší spôsob, ako vidieť prvých pár položiek dátového rámca.
glimpse (join_tibble) Pozorovania: 658 461 Premenné: 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 “, ... $ PÔVOD„ 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, NA, ... $ Popis "Delta Air Lines Inc.", "Delta Air Lines Inc.", " Delta Air…
Táto pripojená množina údajov má teraz nový stĺpec s názvom leteckej spoločnosti. Ak používate verziu tohto kódu sami, pravdepodobne si všimnete, že dplyr bol oveľa rýchlejší ako základný R.
Ďalej sa pozrime na superrýchly spôsob, ako spojiť.