Ohjelmointi

Tietojen yhdistäminen R: ssä R-yhdistämisen, dplyrin tai data.table-taulukon avulla

R: llä on useita nopeita ja tyylikkäitä tapoja liittää datakehykset yhteisen sarakkeen avulla. Haluaisin näyttää sinulle kolme heistä:

  • pohja R: t yhdistää() toiminto,
  • dplyrin liittyminen toimintoperheeseen ja
  • data.table-hakasulkujen syntaksit.

Hanki ja tuo tiedot

Tässä esimerkissä käytän yhtä suosikkini esittelytietoja - lentojen viiveajat Yhdysvaltain liikennetilastovirastolta. Jos haluat seurata, siirry osoitteeseen //bit.ly/USFlightDelays ja lataa haluamasi ajanjakson tiedot sarakkeilla Lennon päivämäärä, Reporting_Airline, Alkuperä, Kohdeja DepartureDelayMinutes. Hanki myös hakutaulukko Reporting_Airline.

Tai lataa nämä kaksi tietojoukkoa - plus R-koodini yhteen tiedostoon ja PowerPoint, joka selittää erityyppisiä tietoyhdistelmiä - täältä:

Lataa koodi, data ja PowerPoint tietojen yhdistämiseksi R: hen Sisältää useita datatiedostoja, PowerPoint- ja R-komentosarjan artikkelin mukana. Sharon Machlis

Jos haluat lukea tiedostossa, jonka pohja on R, puristan ensin lennon viivästystiedoston ja tuon sitten sekä lennon viivästystiedot että koodin hakutiedoston read.csv (). Jos käytät koodia, lataamallasi viivetiedostolla on todennäköisesti eri nimi kuin alla olevassa koodissa. Huomaa myös, että hakutiedosto on epätavallista .csv_ laajennus.

pura pakkaus ("673598238_T_ONTIME_REPORTING.zip")

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

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

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

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

Seuraavaksi katson molempia tiedostoja pää():

pää (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

pää (mylookup) Koodin kuvaus 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 itäinen

Yhdistyy emäksen R kanssa

Mydf-viivetietokehyksessä on vain lentoyhtiön tiedot koodin mukaan. Haluaisin lisätä sarakkeen lentoyhtiöiden nimillä mylookup. Yksi perus R tapa tehdä tämä on yhdistää() -toimintoa käyttäen perussyntaksia yhdistää (df1, df2). Sillä ei ole merkitystä datakehyksen 1 ja datakehyksen 2 järjestyksessä, mutta kumpi ensin on, katsotaan x: ksi ja toinen y: ksi.

Jos sarakkeilla, joihin haluat liittyä, ei ole samaa nimeä, sinun on kerrottava yhdistämiselle, mihin sarakkeisiin haluat liittyä: by. x x-datakehyksen sarakkeen nimelle ja by.y y: lle, kuten yhdistäminen (df1, df2, by.x = "df1ColName", by.y = "df2ColName").

Voit myös kertoa yhdistämiselle, haluatko kaikki rivit, mukaan lukien rivit ilman vastaavuuksia, vai vain vastaavat rivit argumenteilla kaikki. x ja liittolainen. Tässä tapauksessa haluaisin kaikki viivetietojen rivit. jos hakutaulukossa ei ole lentoyhtiön koodia, haluan silti tiedot. Mutta en tarvitse hakutaulukon rivejä, jotka eivät ole viivästystiedoissa (vanhoissa lentoyhtiöissä on joitain koodeja, jotka eivät enää lennä siellä). Niin, kaikki. x on yhtä suuri TOTTA mutta liittolainen on yhtä suuri VÄÄRÄ. Koko koodi:

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

by.y = "koodi", kaikki.x = TOSI, kaikki.y = EPÄTOSI)

Uusi yhdistetty tietokehys sisältää sarakkeen nimeltä Kuvaus, jossa on lentoyhtiön nimi operaattorin koodin perusteella.

head (join_df) OP_UNIQUE_CARRIER FL_DATE ORIGIN DEST DEP_DELAY_NEW X Kuvaus 1 9E 2019-08-12 JFK SYR 0 NA Endeavor 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 .

Liittyy dplyrin kanssa

dplyr käyttää SQL-tietokannan syntaksia liittymistoimintoihinsa. A vasemmalle liittyä tarkoittaa: Sisällytä kaikki vasemmalla olevat puolet (mikä oli x-datakehys yhdistää()) ja kaikki rivit, jotka sopivat oikealta (y) datakehykseltä. Jos liittymissarakkeilla on sama nimi, tarvitset vain left_join (x, y). Jos heillä ei ole samaa nimeä, tarvitset mennessä väite, kuten left_join (x, y, kirjoittanut = c ("df1ColName" = "df2ColName")) .

Huomioi mennessä: Se on nimetty vektori, jossa sekä vasemman että oikean sarakkeen nimet ovat lainausmerkeissä.

Koodi, jolla molemmat tietojoukot tuodaan ja yhdistetään left_join () alapuolella. Se alkaa lataamalla dplyr- ja readr-paketit ja lukee sitten kaksi tiedostoa read_csv (). Käytettäessä read_csv (), Minun ei tarvitse purkaa tiedostoa ensin.

kirjasto (dplyr)

kirjasto (readr)

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

mylookup_tibble <- lue_csv ("L_UNIQUE_CARRIERS.csv_")

join_tibble <- left_join (mytibble, mylookup_tibble,

kirjoittanut = c ("OP_UNIQUE_CARRIER" = "Koodi")

read_csv () luo säkkejä, jotka ovat tietyntyyppisiä tietokehyksiä, joissa on joitain lisäominaisuuksia. left_join () yhdistää nämä kaksi. Katso syntaksia: Tässä tapauksessa järjestyksellä on merkitystä. left_join () tarkoittaa sisältää kaikki rivit vasemmalla tai ensimmäisellä tietojoukolla, mutta vain rivit, jotka vastaavat toista. Ja koska minun täytyy liittyä kahteen eri nimettyyn sarakkeeseen, sisällytin a mennessä Perustelu.

Voimme tarkastella tuloksen rakennetta dplyrin avulla vilkaisu () -toiminto, joka on toinen tapa nähdä datakehyksen muutamat tärkeimmät kohteet.

vilkaisu (join_tibble) Havaintoja: 658461 Muuttujat: 7 $ FL_DATE 2019-08-01, 2019-08-01, 2019-08-01, 2019-08-01, 2019-08-01… "," 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,… $ Kuvaus "Delta Air Lines Inc.", "Delta Air Lines Inc.", " Delta Air…

Tällä yhdistetyllä tietojoukolla on nyt uusi sarake lentoyhtiön nimellä. Jos suoritat tämän koodin version itse, huomaat todennäköisesti, että dplyr oli paljon nopeampi kuin perus R.

Seuraavaksi tarkastellaan supernopeaa tapaa liittyä.

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