Programiranje

Kako združiti podatke v R z uporabo R merge, dplyr ali data.table

R ima številne hitre in elegantne načine za združevanje podatkovnih okvirov s skupnim stolpcem. Rad bi vam pokazal tri:

  • osnova R's spajanje () funkcija,
  • družina funkcij dplyr's join in
  • sintaksa oklepaja data.table.

Pridobite in uvozite podatke

Za ta primer bom uporabil enega izmed mojih najljubših naborov predstavitvenih podatkov - časi zakasnitve leta z ameriškega urada za prometno statistiko. Če želite nadaljevati, pojdite na //bit.ly/USFlightDelays in s stolpci prenesite podatke za izbrani časovni okvir Datum leta, Reporting_Airline, Izvor, Cilj, in DepartureDelayMinutes. Pridobite tudi iskalno tabelo za Reporting_Airline.

Ali pa prenesite ta dva nabora podatkov - skupaj z mojo kodo R v eno datoteko in PowerPoint, ki pojasnjuje različne vrste združitev podatkov - tukaj:

prenesite kodo, podatke in PowerPoint za spajanje podatkov v R Vključuje več podatkovnih datotek, PowerPoint in R skript, ki spremlja članek. Sharon Machlis

Če želite prebrati datoteko z osnovo R, najprej razpakiram datoteko zakasnitve leta, nato pa uvozim podatke o zamudi leta in datoteko iskanja kode z read.csv (). Če uporabljate kodo, bo datoteka z zamudo, ki ste jo prenesli, verjetno imela drugačno ime kot v spodnji kodi. Upoštevajte tudi nenavadne datoteke iskanja .csv_ podaljšanje.

razpakiraj ("673598238_T_ONTIME_REPORTING.zip")

mydf <- read.csv ("673598238_T_ONTIME_REPORTING.csv",

sep = ",", quote = "\" ")

mylookup <- read.csv ("L_UNIQUE_CARRIERS.csv_",

quote = "\" ", sep =", ")

Nato bom pokukal v obe datoteki z glava ():

glava (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

glava (mylookup) Koda Opis 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 vzhodni

Združi z osnovo R

Podatkovni okvir zamude mydf vsebuje samo podatke o letalskem prevozniku s kodo. Rad bi dodal stolpec z imeni letalskih prevoznikov iz mylookup. Eden osnovnih načinov, kako to narediti, je spajanje () funkcija z uporabo osnovne sintakse spajanje (df1, df2). Ni pomembno vrstni red podatkovnega okvira 1 in podatkovnega okvira 2, toda kateri koli je prvi, se šteje x, drugi pa y.

Če stolpci, ki se jim želite pridružiti, nimajo istega imena, morate sporočiti merge, katerim stolpcem se želite pridružiti: by.x za ime stolpca podatkovnega okvira x in by.y za y eno, kot je spajanje (df1, df2, by.x = "df1ColName", by.y = "df2ColName").

Merge lahko tudi poveste, ali želite z argumenti vse vrstice, tudi tiste brez ujemanja, ali samo vrstice, ki se ujemajo vse.x in vse.y. V tem primeru bi želel vse vrstice iz podatkov o zamudi; če v iskalni tabeli ni kode letalske družbe, še vedno želim informacije. Vendar ne rabim vrstic iz iskalne tabele, ki niso v podatkih o zamudi (tam je nekaj kod za stare letalske družbe, ki tam ne letijo več). Torej, vse.x enako PRAV ampak vse.y enako NAPAKA. Polna koda:

joined_df <- spajanje (mydf, mylookup, by.x = "OP_UNIQUE_CARRIER",

by.y = "Koda", all.x = TRUE, all.y = FALSE)

Novi združeni podatkovni okvir vključuje stolpec z imenom Opis z imenom letalske družbe na podlagi kode prevoznika.

glava (pridruženo_df) OP_UNIQUE_CARRIER FL_DATE ORIGIN DEST DEP_DELAY_NEW X Opis 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 .

Pridruži se z dplyr

dplyr za svoje funkcije združevanja uporablja sintakso baze podatkov SQL. A levo pridruži pomeni: Vključi vse na levi (v čem je bil podatkovni okvir x spajanje ()) in vse vrstice, ki se ujemajo z desnega (y) podatkovnega okvira. Če imajo stolpci za združevanje isto ime, je vse, kar potrebujete left_join (x, y). Če nimajo istega imena, potrebujete avtor argument, kot je left_join (x, y, by = c ("df1ColName" = "df2ColName")) .

Upoštevajte sintakso za avtor: Je imenovani vektor z imeni levega in desnega stolpca v narekovajih.

Koda za uvoz in združitev obeh naborov podatkov z uporabo left_join () je spodaj. Začne se z nalaganjem paketov dplyr in readr in nato prebere v dveh datotekah z read_csv (). Pri uporabi read_csv (), Datoteke ni treba najprej razpakirati.

knjižnica (dplyr)

knjižnica (bralnik)

mytibble <- read_csv ("673598238_T_ONTIME_REPORTING.zip")

mylookup_tibble <- read_csv ("L_UNIQUE_CARRIERS.csv_")

joined_tibble <- left_join (mytibble, mylookup_tibble,

od = c ("OP_UNIQUE_CARRIER" = "Koda"))

read_csv () ustvarja ploščice, ki so vrsta podatkovnega okvira z nekaterimi dodatnimi funkcijami. left_join () združi oba. Oglejte si sintakso: v tem primeru je pomemben vrstni red. left_join () pomeni vključuje vse vrstice na levi ali prvi nabor podatkov, vendar le vrstice, ki se ujemajo z drugo. In ker se moram pridružiti dvema različno poimenovanima stolpcema, sem vključil avtor prepir.

Strukturo rezultata lahko pogledamo z dplyrjevimi pogled () funkcija, ki je še en način za prikaz prvih nekaj elementov podatkovnega okvira.

pogled (joined_tibble) Opazovanja: 658.461 Spremenljivke: 7 $ FL_DATE 2019-08-01, 2019-08-01, 2019-08-01, 2019-08-01, 2019-08-01 ... $ 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, ... $ Opis "Delta Air Lines Inc.", "Delta Air Lines Inc.", " Delta Air ...

Ta združeni nabor podatkov ima zdaj nov stolpec z imenom letalske družbe. Če sami zaženete različico te kode, boste verjetno opazili, da je bil dplyr precej hitrejši od osnovne R.

Nato si oglejmo super hiter način pridružitve.

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