Programovanie

Ako zlúčiť dáta v R pomocou tabuľky R merge, dplyr alebo data.table

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 Machlis

Ak 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 NA

hlava (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ť.

$config[zx-auto] not found$config[zx-overlay] not found