Nopeus. Tiivis syntaksi. Taaksepäin yhteensopivuus.
Mutta erityisesti nopeus.
Nämä ovat joitain ominaisuuksia, jotka tekevät R: n datasta. Taulukon houkuttelevan faneilleen.
Ja vaikka olisitkin vahvistettu siisti versio (kuten minä olen), data.table voi olla hyödyllinen lisäys R-työkalupakkiisi - varsinkin kun työskentelet suurten tietojoukkojen kanssa, Shiny-sovelluksessa tai pakettitoiminnossa.
Tämä R data.table -pelin huijausarkki eroaa monista muista, koska se on vuorovaikutteinen. Voit hakea tiettyä ilmausta, kuten lisää sarake tai tietyn tyyppisen tehtäväryhmän mukaan Alajoukko tai Muotoile uudelleen. Lisäksi koska tämä huijausarkki sisältää tidyverse "translation" -koodin, voit myös etsiä suosikkiversiota kuten muuttua tai peräkkäin.
Rekisteröityneet käyttäjät voivat ladata tämän interaktiivisen taulukon laajennetun version käytettäväksi omissa järjestelmissään! Rekisteröityminen on ilmaista.
Hae data.table- ja tidoververs-tehtäviä ja koodia
Tehtävä | Tyyppi | data.table-koodi | Siisti koodi |
---|---|---|---|
Lue CSV-tiedostossa | Tuonti | mydt <- fread ("myfile.csv") | myt <- read_csv ("omatiedostot.csv") #OR myt <- vroom :: vroom ("myfile.csv") |
Tuo CSV-tiedoston ensimmäinen x rivien määrä | Tuonti | mydt_x <- fread ("myfile.csv", nrows = x) | myt_x <- luku_csv ("omatiedosto.csv", n_max = x) |
Tuo CSV-tiedostosta vain ne rivit, jotka vastaavat tiettyä mallia | Tuonti | mydt_pattern <- fread ("grep 'mypattern' myfile.csv") | myt_pattern <- vroom :: vroom (pipe ("grep 'mypattern' myfile.csv")) |
Tuo .gz-pakattu tiedosto | Tuonti | mydt <- fread ("myfile.gz") | myt <- vroom :: vroom ("myfile.gz") |
Tuo pakattu a.zip-tiedosto | tuonti | mydt <- fread (cmd = 'pura -cq myfile.zip') | myt <- lue_csv ("myfile.zip") |
Luo tietotaulukko olemassa olevasta tietokehyksestä (tibeversio | Tuonti | mydt <- as.data.table (mydf) # OR setDT (mydf) | myt <- as_tibble (mydf) |
Muuta tietoja. Taulukko paikallaan tekemättä kopiota | Rähinä | mikä tahansa funktio, joka alkaa joukosta, kuten setkey (mydt, mycol) tai suluissa oleva operaattori: = | ei sovellettavissa |
Järjestä rivit useiden sarakearvojen perusteella | Rähinä | mydt2 <- mydt [järjestys (colA, -colB)] # OR setorder (mydt, colA, -colB) | myt <- järjestää (myt, colA, -colB) |
Nimeä sarakkeet uudelleen | Rähinä | setnames (mydt, old = c ('colA', 'colB'), new = c ('NewColA', 'NewColB')) | myt <- nimeä uudelleen (myt, NewColA = colA, NewColB = colB) |
Sarakkeiden järjestys: Siirrä joitain sarakkeita etuasemaan (vasen eniten) | Rähinä | setcolorder (mydt, c ("colB", "colC")) # colB nyt asennossa 1 ja colC paikassa 2 | myt <- siirrä (myt, colB, colC) |
Suodata rivit rivinumerolle n | Alajoukko | mydt2 <- mydt [n] | myt2 <- viipale (myt, n) |
Suodata viimeinen rivi | Alajoukko | mydt2 <- mydt [.N] | myt2 <- viipale (myt, n ()) |
Suodata rivit ehdon mukaan | Alajoukko | # Joissakin tapauksissa setkey (mydt, colA, colB) nopeuttaa suorituskykyä # colA: n ja colB: n loogisten testien yhteydessä; sama muiden sarakkeiden kanssa mydt2 <- mydt [looginen lauseke] | myt2 <- suodatin (myt, looginen lauseke) |
Suodata rivit, joissa colA on merkkijono1 tai merkkijono2 | Alajoukko | mydt2 <- mydt [colA% leuka% c ("merkkijono1", "merkkijono2")] | myt2 <- suodatin (myt, colA%% c: ssä ("merkkijono1", "merkkijono2")) |
Suodata rivit, joissa colA vastaa säännöllistä lauseketta | Alajoukko | mydt2 <- mydt [colA% kuten% "mypattern"] | myt2 <- suodatin (myt, stringr :: str_detect (colA, "mypattern")) |
Suodata rivit, joissa colA-arvot ovat kahden numeron välillä | Alajoukko | mydt2 <- mydt [colA% välillä% c (n1, n2)] | myt2 <- suodatin (myt, välillä (colA, n1, n2)) |
Suodata ensimmäiset n riviä ryhmittäin | Alajoukko | mydt2 <- mydt [, .SD [1: n], kirjoittanut = groupcol] | myt2% group_by (groupcol)%>% slice (1: n) |
Suodata rivit enimmäisarvolle ryhmittäin | Alajoukko | mydt2 <- mydt [, .SD [mikä.max (valcol)], kirjoittanut = ryhmäkolmi] | myt2% group_by (groupcol)%>% filter (valcol == max (valcol)) |
Valitse sarake ja palauta tulokset vektorina | Alajoukko | myvec <- mydt [, colname] | myvec <- vedä (myt, colname) |
Valitse useita sarakkeita luodaksesi uuden data.table-taulukon (tietokehys tai tibble for tidyverse) | Alajoukko | mydt2 <- mydt [, luettelo (colA, colB)] # OR mydt2 <- mydt [,. (colA, colB)] # OR mydt2 <- mydt [, c ("colA", "colB")] | myt2 <- valitse (myt, colA, colB) |
Valitse useita sarakkeita käyttämällä muuttujaa, joka sisältää sarakkeiden nimet | Alajoukko | my_col_names <- c ("colA", "colB") mydt2 <- mydt [, ..my_col_names] # TAI mydt2 <- mydt [, my_col_names, with = EPÄTOSI] | my_col_names <- c ("colA", "colB") myt2 <- valitse (myt, all_of (my_col_names)) |
Valitse useita sarakkeita ja nimeä jotkut uudelleen | Alajoukko | mydt2 <- mydt [,. (uusi nimi1 = col1, uusi nimi2 = col2, col3)] | myt2 <- valitse (myt, newname1 = col1, newname2 = col2, col3) |
Sulje pois useita sarakkeita | Alajoukko | mydt2 <- mydt [, -c ("colA", "colB")] # OR mydt2 <- mydt [,! c ("colA", "colB")] # OR my_col_names <- c ("colA", "colB") mydt2 <- mydt [,! .. my_col_names] | myt2 <- valitse (myt, -c (colA, colB)) # OR my_col_names <- c ("colA", "colB") myt2 <- valitse (myt, - {{my_col_names}}) |
Poista päällekkäiset rivit useiden sarakkeiden arvojen perusteella | Alajoukko | mydt2 <- ainutlaatuinen (mydt, kirjoittanut = c ("colA", "colB")) | myt2 <- erillinen (myt, colA, colB, .keep_all = TOSI) |
Laske ainutlaatuiset rivit useiden sarakkeiden perusteella | Tee yhteenveto | ainutlaatuinenN (mydt, kirjoittanut = c ("colA", "colB")) | nrow (erillinen (myt, colA, colB)) |
Suorita tietojen yhteenvetolaskelmat | Tee yhteenveto | mydt2 <- mydt [, myfun (colA ...)] | myt2% yhteenveto (ColName = myfun (colA ...)) |
Suorita yhteenvetolaskelmat yhden ryhmän tiedoista | Tee yhteenveto | mydt2 <- mydt [, myfun (colA ...), kirjoittanut = groupcol] | myyt2% group_by (groupcol)%>% yhteenveto ( NewCol = myfun (colA ...) ) |
Suorita tietojen yhteenvetolaskelmat yhden ryhmän mukaan ja nimeä uusi sarake | Tee yhteenveto | mydt2 <- mydt [,. (MyNewCol = myfun (colA ...)), kirjoittanut = groupcol] | myyt2% group_by (groupcol)%>% yhteenveto ( NewCol = myfun (colA ...) ) |
Suorita yhteenvetolaskelmat useille ryhmille | Tee yhteenveto | mydt2 <- mydt [, myfun (colA ...), kirjoittanut =. (groupcol1, groupcol2)] | myyt2% group_by (groupcol1, groupcol2)%>% yhteenveto ( NewCol = myfun (colA ...) ) |
Suorita suodatettujen tietojen yhteenvetolaskenta useiden ryhmien mukaan | Tee yhteenveto | mydt2 <- mydt [suodata lauseke, myfun (colA), kirjoittanut =. (ryhmäkolmi1, ryhmäkolmi2)] | myyt2% suodatin (suodattimen lauseke)%>% group_by (groupcol1, groupcol2)%>% yhteenveto ( NewCol = myfun (colA), .groups = "säilytä" ) |
Laske rivien määrä ryhmittäin | Tee yhteenveto | mydt2 <- mydt [,. N, kirjoittanut = groupcol] # yhdelle ryhmälle # OR mydt2 <- mydt [, .N, kirjoittanut =. (ryhmäkolmi1, ryhmäkolmi2)] | myt2 <- count (myt, groupcol) # yhdelle ryhmälle # OR myt2 <- määrä (myt, ryhmäkolmi1, ryhmäkolko2) |
Tee yhteenveto useista sarakkeista ja palauta tulokset useisiin sarakkeisiin | Tee yhteenveto | mydt2 <- mydt [, lapply (.SD, myfun), .SDcols = c ("colA", "colB")] | myyt2% yhteenveto ( poikki (c (colA, colB), myfun) ) |
Tee yhteenveto useista sarakkeista ryhmittäin ja palauta tulokset useisiin sarakkeisiin | Tee yhteenveto | mydt2 <- mydt [, lapply (.SD, myfun), .SDcols = c ("colA", "colB"), kirjoittanut = groupcol] | myyt2% group_by (groupcol)%>% yhteenveto (poikki (c (colA, colB), myfun)) |
Lisää sarake | Laskea | mydt [, MyNewCol: = myfun (colA)] | my% muuttua( MyNewCol = myfun (colA) ) |
Lisää useita sarakkeita kerralla | Laskea | # käytä mitä tahansa toimintoa tai lauseketta mydt [, `: =` (NewCol1 = myfun (colA), NewCol2 = colB + colC)] # OR mydt [, c ("NewCol1", "newCol2"): = luettelo (myfun (colA), colB + colC)] | my% muuttua( MyNewCol1 = myfun (colA), MyNewCol2 = colB + colC ) |
Lisää sarake käyttämällä toisen sarakkeen nykyisiä ja edellisiä arvoja, kuten etsimällä eroa päivämäärän arvon ja edellisen päivämäärän välillä | Laskea | mydt [, Diff: = colA - muutos (colA)] | myt <- mutaatio (myt, Diff = colA - viive (colA)) |
Lisää sarake, joka viittaa ryhmän sarakkeen edelliseen arvoon | Laskea | mydt2 <- mydt [, Diff: = colA - shift (colA), kirjoittanut = ryhmäkolmi] | myt2% group_by (groupcol)%>% mutaatio (Diff = colA - lag (colA)) |
Lisää sarake rivin tunnistenumeroilla ryhmittäin | Laskea | mydt [, myid: = 1: .N, kirjoittanut = groupcol] | myt% group_by (groupcol)%>% mutatoi (myid = rivinumero_) () |
Lisää sarake useiden ehtojen perusteella käyttämättä useita if else -käskyjä (kuten SQL: n CASE) | Laskea | # Tarvitsee data.table-version 1.13 tai uudemman # Pidän jokaisesta ehdosta uudella rivillä, mutta sitä ei vaadita mydt2 <- mydt [, NewCol: = fcase ( ehto1, "Arvo1", ehto2, "Arvo2", ehto3, "Arvo3", oletus = "Muu" # arvo kaikelle muulle )] | myyt2% muuttua( NewCol = tapaus_milloin ( ehto1 ~ "Arvo1", ehto2 ~ "Arvo2", ehto3 ~ "Arvo3", TOSI ~ "Muu" ) ) |
Lisää sarake käyttämällä riviä | Laskea | mydt [, newcol: = myfun (colB, colC, colD), kirjoittanut = 1: nrow (mydt)] # tai jos colA: lla on kaikki ainutlaatuiset arvot mydt [, newcol: = myfun (colB, colC, colD), kirjoittanut = colA] | my% peräkkäin ()%>% muuttua( newcol = myfun (colB, colC, colD) ) # tai my% peräkkäin ()%>% muuttua( #use dplyr valitse syntakse: newcol = myfun (c_across (colB: colD)) ) |
Yhdistä kaksi tietojoukkoa useammalla kuin yhdellä sarakkeella; pidä kaikki sarjassa1, mutta vain ottelut sarjassa2 | Liittyä seuraan | mydt <- dt2 [dt1, päällä = c ("dt2col" = "dt1col")] # OR mydt <- yhdistäminen (dt1, dt2, by.x = "dt1col", by.y = "dt2col", kaikki.x = TOSI) # OR setkey (dt1, "dt1col") setkey (dt2, "dt2col") mydt <- dt2 [dt1] | myt <- left_join (df1, df2, kirjoittanut = c ("df1col" = "df2col")) |
Yhdistä 2 tietojoukkoa useammalla kuin yhdellä sarakkeella - pidä kaikki sarjassa1, mutta vain sarjassa2 | Liittyä seuraan | mydt <- yhdistäminen (dt1, dt2, by.x = c ("dt1colA", "dt1colB"), by.y = c ("dt2colA", "dt2colB"), kaikki.x = TOSI, kaikki.y = EPÄTOSI ) TAI asetusavain (dt1, dt1colA, dt1colB) asetusavain (dt2, dt2colA, dt2colB) mydt <- dt2 [dt1] | myt <- vasen_liity (df1, df2, = c ("df1colA" = "df2colA", "df1colB" = "df2colB")) |
Yhdistä kaksi tietojoukkoa yhdellä sarakkeella; pitää vain otteluita | Liittyä seuraan | mydt <- yhdistäminen (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2") | myt <- sisäinen_liity (df1, df2, = c ("df1col" = "df2col")) |
Yhdistä kaksi tietojoukkoa yhdellä sarakkeella ja pidä kaikki tiedot molemmissa sarjoissa riippumatta siitä, onko otteluita | Liittyä seuraan | mydt <- yhdistäminen (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2", kaikki = TOSI) | myt <- full_join (df1, df2, kirjoittanut = c ("df1col" = "df2col")) |
Yhdistä kaksi tietojoukkoa lisäämällä rivejä toisesta loppuun | Liittyä seuraan | mydt_joined <- rbindlist (list (mydt, mydt2)) | myt_joined <- bind_rows (myt, myt2) |
Muuta tietoja laajasta pitkään | Muotoile uudelleen | mydt_long <- sula (mydt, toimenpide.vars = c ("col1", "col2", "col3"), muuttuja.nimi = "NewCategoryColName", arvo.nimi = "NewValueColName") | myt_long <- pivot_longer (myt, cols = alkaa_with ("col"), names_to = "NewCategoryColName", arvot_to = "NewValueColName") |
Muuta tietoja pitkältä laajalle | Muotoile uudelleen | mydt_wide <- dcast (mydt, id_col1 ~ col1, value.var = "ValueColName") | myt_wide <- pivot_wider (myt, nimet_alkaen = col1, arvot_luku = ValueColName) |
Ketju useita lausekkeita | Rähinä | mydt [lauseke1] [lauseke2] | my% lauseke1%>% lauseke 2 |
Vie tiedot CSV-tiedostoon | Viedä | fwrite (mydt, "myfile.csv") | write_csv (myt, "omatiedosto.csv") |
Liitä rivit olemassa olevaan CSV-tiedostoon | Viedä | fwrite (mydt2, "myfile.csv", liite = TOSI) | vroom :: vroom_write (myt2, "myfile.csv", delim = ",", liite = TOSI) |
Vie tiedot pakattuun CSV-tiedostoon | Viedä | fwrite (mydt, "myfile.csv.gz", compress = "gzip") | vroom :: vroom_write (myt, "myfile2.csv.gz") |
Datasta on paljon enemmän opittavaa. Taulukko! Katso joitain data.table-taulukon perusteita viiden minuutin esittelyvideostani:
Lopuksi data.table-verkkosivustolla on paljon lisätietoja ja vinkkejä, kuten käyttö asetusavain ()
ja muita indeksointivinkkejä.