Programavimas

Kaip sujungti duomenis R naudojant R suliejimo, dplyr arba data.table

R turi daugybę greitų, elegantiškų būdų, kaip sujungti duomenų rėmus pagal bendrą stulpelį. Norėčiau jums parodyti tris iš jų:

  • bazė R sujungti () funkcija,
  • prisijungti prie funkcijų šeimos ir
  • duomenų. lentelės skliausteliuose sintaksė.

Gaukite ir importuokite duomenis

Šiame pavyzdyje naudosiu vieną iš mėgstamiausių demonstracinių duomenų rinkinių - skrydžio vėlavimo laiką iš JAV Transporto statistikos biuro. Jei norite sekti toliau, eikite į //bit.ly/USFlightDelays ir atsisiųskite pasirinkto laikotarpio duomenis su stulpeliais Skrydžio data, „Reporting_Airline“, Kilmė, Kelionės tikslasir DepartureDelayMinutes. Taip pat gaukite paieškos lentelę „Reporting_Airline“.

Arba atsisiųskite šiuos du duomenų rinkinius - plius mano R kodą į vieną failą ir „PowerPoint“, paaiškinantį skirtingų tipų duomenų sujungimus - čia:

atsisiųsti kodą, duomenis ir „PowerPoint“, kaip sujungti duomenis į „R“. Įtraukiami keli duomenų failai, „PowerPoint“ ir „R“ scenarijus, kuris pridedamas prie straipsnio. Sharon Machlis

Norėdami perskaityti faile su baze R, pirmiausia išarchyvuoju skrydžio atidėjimo failą ir tada importuoju skrydžio vėlavimo duomenis ir kodo paieškos failą su skaityti.csv (). Jei naudojate kodą, atsisiuntimo delsos failas greičiausiai turės kitą pavadinimą nei žemiau pateiktame kode. Be to, atkreipkite dėmesį į neįprastą paieškos failą .csv_ pratęsimas.

išpakuoti ("673598238_T_ONTIME_REPORTING.zip")

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

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

„mylookup“ <- skaityti.csv ("L_UNIQUE_CARRIERS.csv_",

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

Tada žvilgtelėsiu į abu failus galva():

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

vadovas („mylookup“) Kodas Aprašymas 1 02Q Titan Airways 2 04Q Tradewind Aviation 3 05Q Comlux Aviation, AG 4 06Q Master Top Linhas Aereas Ltd. b / a Rytų

Susilieja su pagrindu R

„Mydf“ vėlavimo duomenų rėmelyje yra tik oro linijų informacija pagal kodą. Norėčiau pridėti stulpelį su oro linijų pavadinimais iš mylookup. Vienas bazinis R būdas tai padaryti yra sujungti () funkcija, naudojant pagrindinę sintaksę sujungti (df1, df2). Nesvarbu, kokia yra duomenų rėmų 1 ir 2 rėmų tvarka, bet kuris iš jų bus pirmasis, laikomas x, o antrasis - y.

Jei stulpeliai, prie kurių norite prisijungti, neturi to paties pavadinimo, sujungti, prie kurių stulpelių norite prisijungti, turite pasakyti: by.x x duomenų rėmelio stulpelio pavadinimui ir by.y už y vieną, pvz sujungti (df1, df2, by.x = "df1ColName", by.y = "df2ColName").

Taip pat galite sujungti, ar norite, kad visos eilutės, įskaitant eilutes be atitikties, ar tik atitinkančios eilutės, su argumentais viskas.x ir viskas.y. Šiuo atveju norėčiau visų eilučių iš vėlavimo duomenų; jei paieškos lentelėje nėra oro linijų kodo, vis tiek noriu informacijos. Bet man nereikia paieškos lentelės eilučių, kurių nėra vėlavimo duomenyse (yra keletas senų oro linijų kodų, kurie ten nebeskrenda). Taigi, viskas.x lygu TIESA bet viskas.y lygu NETIESA. Visas kodas:

join_df <- sujungti (mydf, mylookup, by.x = "OP_UNIQUE_CARRIER",

by.y = "Kodas", visi.x = TIESA, visi.y = NETIESA)

Naujame sujungtame duomenų rėmelyje yra stulpelis, pavadintas „Aprašymas“ su oro linijų bendrovės pavadinimu pagal vežėjo kodą.

vadovas (join_df) OP_UNIQUE_CARRIER FL_DATE ORIGIN DEST DEP_DELAY_NEW X Aprašymas 1 9E 2019-08-12 JFK SYR 0 NA Endeavour Air Inc. 2 9E 2019-08-12 TYS DTW 0 NA Endeavour Air Inc. 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 .

Prisijungia su dplyr

„dplyr“ prisijungimo funkcijoms naudoti SQL duomenų bazės sintaksę. A kairysis prisijungimas reiškia: Įtraukti viską kairėje (koks buvo x duomenų rėmelis sujungti ()) ir visos eilutės, kurios sutampa iš dešiniojo (y) duomenų rėmelio. Jei prisijungimo stulpeliai turi tą patį pavadinimą, jums tereikia left_join (x, y). Jei jie neturi to paties pavadinimo, jums reikia pateikė argumentas, pvz left_join (x, y, = c ("df1ColName" = "df2ColName")) .

Atkreipkite dėmesį į pateikė: Tai įvardytas vektorius, kairiųjų ir dešiniųjų stulpelių pavadinimai kabutėse.

Kodas, skirtas importuoti ir sujungti abu duomenų rinkinius naudojant left_join () yra žemiau. Tai prasideda pakraunant „dplyr“ ir „readr“ paketus, tada nuskaitomi du failai su read_csv (). Naudojant read_csv (), Man nereikia pirmiausia išpakuoti failo.

biblioteka (dplyr)

biblioteka (skaityti)

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

mylookup_tibble <- skaityti_csv ("L_UNIQUE_CARRIERS.csv_")

join_tibble <- kairysis_join (mytibble, mylookup_tibble,

pateikė = c ("OP_UNIQUE_CARRIER" = "Kodas")

read_csv () kuria tibbles, kurie yra tam tikro tipo duomenų rėmeliai su papildomomis funkcijomis. left_join () sujungia abu. Pažvelkite į sintaksę: šiuo atveju svarbi tvarka. left_join () reiškia įtraukti visas kairėje esančias eilutes arba pirmą duomenų rinkinį, bet tik tas eilutes, kurios atitinka antrąją. Kadangi man reikia prisijungti dviem skirtingai pavadintais stulpeliais, įtraukiau a pateikė argumentas.

Mes galime pažvelgti į rezultato struktūrą su dplyr žvilgsnis () funkcija, kuri yra dar vienas būdas pamatyti kelis svarbiausius duomenų rėmelio elementus.

žvilgsnis (join_tibble) Pastebėjimai: 658 461 kintamieji: 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,… $ Aprašymas "Delta Air Lines Inc.", "Delta Air Lines Inc.", " „Delta Air“…

Šiame sujungtame duomenų rinkinyje dabar yra naujas stulpelis su aviakompanijos pavadinimu. Jei pats paleisite šio kodo versiją, tikriausiai pastebėsite, kad „dplyr“ buvo daug greitesnis nei „R“ bazė.

Toliau pažvelkime į labai greitą prisijungimo būdą.