Rýchlosť. Stručná syntax. Spätná kompatibilita.
Ale hlavne rýchlosť.
To sú niektoré z funkcií, vďaka ktorým je R's data.table pre svojich fanúšikov pútavá.
A aj keď ste potvrdeným používateľom tidyverse (ako som ja), tabuľka data.table môže byť užitočným doplnkom k vašej súprave nástrojov R - najmä pri práci s veľkými množinami údajov, v aplikácii Shiny alebo vo funkcii balíka.
Táto podvádzaná tabuľka s údajmi R sa líši od mnohých iných, pretože je interaktívne. Môžete vyhľadať konkrétnu frázu ako pridať stĺpec alebo podľa typu pracovnej skupiny, ako napr Podmnožina alebo Preformovať. Pretože tento podvádzací list obsahuje upratovací „prekladový“ kód, môžete tiež vyhľadať obľúbené sloveso dplyr, ako napríklad mutovať alebo po rade.
Registrovaní užívatelia si môžu stiahnuť rozšírenú verziu tejto interaktívnej tabuľky na použitie vo svojich vlastných systémoch! Registrácia je bezplatná.
Vyhľadajte údaje a tabuľky a upratané úlohy a kód
Úloha | Typ | kód tabuľky údajov | Tidyverse kód |
---|---|---|---|
Čítať v súbore CSV | Import | mydt <- fread ("myfile.csv") | myt <- read_csv ("myfile.csv") #OR myt <- vroom :: vroom ("myfile.csv") |
Importujte prvých x počet riadkov súboru CSV | Import | mydt_x <- fread ("myfile.csv", nrows = x) | myt_x <- read_csv ("myfile.csv", n_max = x) |
Importujte iba tie riadky zo súboru CSV, ktoré zodpovedajú určitému vzoru | Import | mydt_pattern <- fread ("grep 'mypattern' myfile.csv") | myt_pattern <- vroom :: vroom (pipe ("grep 'mypattern' myfile.csv")) |
Importujte komprimovaný súbor .gz | Import | mydt <- fread ("myfile.gz") | myt <- vroom :: vroom ("myfile.gz") |
Importujte komprimovaný súbor a.zip | dovoz | mydt <- fread (cmd = 'unzip -cq myfile.zip') | myt <- read_csv ("myfile.zip") |
Vytvorte dátovú tabuľku z existujúceho dátového rámca (tibble for tidyverse) | Import | mydt <- as.data.table (mydf) #OR setDT (mydf) | myt <- as_tibble (mydf) |
Upraviť údaje. Tabuľka na mieste bez kopírovania | Hádka | akákoľvek funkcia, ktorá začína na set, ako je setkey (mydt, mycol) alebo pomocou operátora: = v zátvorkách | nepoužiteľné |
Objednávajte riadky na základe viacerých hodnôt stĺpcov | Hádka | mydt2 <- mydt [order (colA, -colB)] #OR setorder (mydt, colA, -colB) | myt <- usporiadať (myt, colA, -colB) |
Premenovať stĺpce | Hádka | setnames (mydt, old = c ('colA', 'colB'), new = c ('NewColA', 'NewColB')) | myt <- premenovať (myt, NewColA = colA, NewColB = colB) |
Zmena poradia stĺpcov: Posuňte niektoré stĺpce do polohy spredu (úplne zľava) | Hádka | setcolorder (mydt, c ("colB", "colC")) # colB teraz na pozícii 1 a colC na pozícii 2 | myt <- premiestniť (myt, colB, colC) |
Filtrovať riadky pre číslo riadku n | Podmnožina | mydt2 <- mydt [n] | myt2 <- plátok (myt, n) |
Filter pre posledný riadok | Podmnožina | mydt2 <- mydt [.N] | myt2 <- slice (myt, n ()) |
Filtrovať riadky podľa podmienky | Podmnožina | # V niektorých prípadoch setkey (mydt, colA, colB) urýchli výkon # pre logické testy na colA a colB; to isté s ostatnými stĺpcami mydt2 <- mydt [logický výraz] | myt2 <- filter (myt, logický výraz) |
Filtrovať riadky, kde stĺpec colA sa rovná reťazcu1 alebo reťazcu2 | Podmnožina | mydt2 <- mydt [colA% chin% c ("string1", "string2")] | myt2 <- filter (myt, colA% in% c ("string1", "string2")) |
Filtrujte riadky, kde sa colA zhoduje s regulárnym výrazom | Podmnožina | mydt2 <- mydt [colA% like% "mypattern"] | myt2 <- filter (myt, stringr :: str_detect (colA, "mypattern")) |
Filtrujte riadky, kde sú hodnoty colA medzi 2 číslami | Podmnožina | mydt2 <- mydt [colA% medzi% c (n1, n2)] | myt2 <- filter (myt, between (colA, n1, n2)) |
Filtrovanie prvých n riadkov podľa skupiny | Podmnožina | mydt2 <- mydt [, .SD [1: n], autor = groupcol] | myt2% group_by (groupcol)%>% slice (1: n) |
Filtrovať riadky podľa maximálnej hodnoty podľa skupiny | Podmnožina | mydt2 <- mydt [, .SD [which.max (valcol)], podľa = groupcol] | myt2% group_by (groupcol)%>% filter (valcol == max (valcol)) |
Vyberte stĺpec a výsledky vráťte ako vektor | Podmnožina | myvec <- mydt [, colname] | myvec <- pull (myt, colname) |
Vyberte viac stĺpcov a vytvorte nový údajový údaj. Tabuľka (údajový rámec alebo tabuľka pre tidyverse) | Podmnožina | mydt2 <- mydt [, zoznam (colA, colB)] #OR mydt2 <- mydt [,. (colA, colB)] #OR mydt2 <- mydt [, c ("colA", "colB")] | myt2 <- vyberte (myt, colA, colB) |
Vyberte viac stĺpcov pomocou premennej obsahujúcej názvy stĺpcov | Podmnožina | my_col_names <- c ("colA", "colB") mydt2 <- mydt [, ..my_col_names] #OR mydt2 <- mydt [, my_col_names, s = FALSE] | my_col_names <- c ("colA", "colB") myt2 <- vyberte (myt, all_of (my_col_names)) |
Vyberte viac stĺpcov a niektoré premenujte | Podmnožina | mydt2 <- mydt [,. (newname1 = col1, newname2 = col2, col3)] | myt2 <- vyberte (myt, newname1 = col1, newname2 = col2, col3) |
Vylúčte viac stĺpcov | Podmnožina | mydt2 <- mydt [, -c ("colA", "colB")] #OR mydt2 <- mydt [,! c ("colA", "colB")] #OR my_col_names <- c ("colA", "colB") mydt2 <- mydt [,! .. my_col_names] | myt2 <- vyberte (myt, -c (colA, colB)) #OR my_col_names <- c ("colA", "colB") myt2 <- select (myt, - {{my_col_names}}) |
Odstráňte duplicitné riadky na základe hodnôt vo viacerých stĺpcoch | Podmnožina | mydt2 <- jedinečný (mydt, by = c ("colA", "colB")) | myt2 <- odlišné (myt, colA, colB, .keep_all = TRUE) |
Spočítajte jedinečné riadky založené na viacerých stĺpcoch | Zhrňte | uniqueN (mydt, by = c ("colA", "colB")) | nrow (zreteľný (myt, colA, colB)) |
Spustite súhrnné výpočty údajov | Zhrňte | mydt2 <- mydt [, myfun (colA ...)] | myt2% summarize (ColName = myfun (colA ...)) |
Spustite súhrnné výpočty údajov podľa jednej skupiny | Zhrňte | mydt2 <- mydt [, myfun (colA ...), by = groupcol] | myt2% group_by (groupcol)%>% zhrnúť ( NewCol = myfun (colA ...) ) |
Spustite súhrnné výpočty údajov podľa jednej skupiny a pomenujte nový stĺpec | Zhrňte | mydt2 <- mydt [,. (MyNewCol = myfun (colA ...)), by = groupcol] | myt2% group_by (groupcol)%>% zhrnúť ( NewCol = myfun (colA ...) ) |
Spustite súhrnné výpočty údajov podľa viacerých skupín | Zhrňte | mydt2 <- mydt [, myfun (colA ...), podľa =. (groupcol1, groupcol2)] | myt2% group_by (groupcol1, groupcol2)%>% zhrnúť ( NewCol = myfun (colA ...) ) |
Spustite súhrnný výpočet filtrovaných údajov podľa viacerých skupín | Zhrňte | mydt2 <- mydt [filtrovať výraz, myfun (colA), podľa =. (groupcol1, groupcol2)] | myt2% filter (výraz filtra)%>% group_by (groupcol1, groupcol2)%>% zhrnúť ( NewCol = myfun (colA), .groups = "keep" ) |
Spočítajte počet riadkov podľa skupín | Zhrňte | mydt2 <- mydt [,. N, podľa = groupcol] # pre jednu skupinu #OR mydt2 <- mydt [, .N, podľa =. (groupcol1, groupcol2)] | myt2 <- count (myt, groupcol) # pre jednu skupinu #OR myt2 <- počet (myt, groupcol1, groupcol2) |
Zhrňte viac stĺpcov a vráťte výsledky do viacerých stĺpcov | Zhrňte | mydt2 <- mydt [, lapply (.SD, myfun), .SDcols = c ("colA", "colB")] | myt2% zhrnúť ( naprieč (c (colA, colB), myfun) ) |
Zhrňte viac stĺpcov podľa skupín a vráťte výsledky do viacerých stĺpcov | Zhrňte | mydt2 <- mydt [, lapply (.SD, myfun), .SDcols = c ("colA", "colB"), podľa = groupcol] | myt2% group_by (groupcol)%>% sumarizovať (naprieč (c (colA, colB), myfun)) |
Pridajte stĺpec | Vypočítať | mydt [, MyNewCol: = myfun (colA)] | myt% mutovať( MyNewCol = myfun (colA) ) |
Pridajte viac stĺpcov naraz | Vypočítať | # použite ľubovoľnú funkciu alebo výraz mydt [, `: =` (NewCol1 = myfun (colA), NewCol2 = colB + colC)] #OR mydt [, c ("NewCol1", "newCol2"): = list (myfun (colA), colB + colC)] | myt% mutovať( MyNewCol1 = myfun (colA), MyNewCol2 = colB + colC ) |
Pridajte stĺpec s použitím aktuálnych a predchádzajúcich hodnôt z iného stĺpca, napríklad vyhľadajte rozdiel medzi hodnotou v dátume a predchádzajúcim dátumom | Vypočítať | mydt [, Diff: = colA - shift (colA)] | myt <- mutovať (myt, Diff = colA - lag (colA)) |
Pridajte stĺpec odkazujúci na predchádzajúcu hodnotu stĺpca podľa skupiny | Vypočítať | mydt2 <- mydt [, Diff: = colA - shift (colA), by = groupcol] | myt2% group_by (groupcol)%>% mutovať (Diff = colA - oneskorenie (colA)) |
Pridajte stĺpec s identifikačnými číslami riadkov podľa skupiny | Vypočítať | mydt [, myid: = 1: .N, od = groupcol] | myt% group_by (groupcol)%>% mutate (myid = row_number ()) |
Pridajte stĺpec na základe niekoľkých podmienok bez použitia viacerých príkazov if else (napríklad CASE jazyka SQL) | Vypočítať | # Vyžaduje dátovú tabuľku verzie 1.13 alebo novšej # Mám rád každú podmienku na novom riadku, ale nie je to potrebné mydt2 <- mydt [, NewCol: = fcase ( podmienka1, "Hodnota1", podmienka2, "Hodnota2", podmienka3, "Hodnota3", default = "Other" # hodnota pre všetky ostatné )] | myt2% mutovať( NewCol = case_when ( podmienka1 ~ "Hodnota1", podmienka2 ~ "Hodnota2", podmienka3 ~ "Hodnota3", TRUE ~ „Iné“ ) ) |
Pridajte stĺpec pomocou operácie po riadku | Vypočítať | mydt [, newcol: = myfun (colB, colC, colD), o = 1: nrow (mydt)] # alebo ak má colA všetky jedinečné hodnoty mydt [, newcol: = myfun (colB, colC, colD), by = colA] | myt% po riadkoch ()%>% mutovať( newcol = myfun (colB, colC, colD) ) # alebo myt% po riadkoch ()%>% mutovať( #use dplyr vyberte syntax: newcol = myfun (c_across (colB: colD)) ) |
Spojte dve množiny údajov o viac ako jeden stĺpec; ponechať všetko v set1, ale iba zápasy v set2 | Pripojte sa | mydt <- dt2 [dt1, on = c ("dt2col" = "dt1col")] #OR mydt <- zlúčiť (dt1, dt2, by.x = "dt1col", by.y = "dt2col", all.x = PRAVDA) #OR setkey (dt1, "dt1col") setkey (dt2, "dt2col") mydt <- dt2 [dt1] | myt <- left_join (df1, df2, by = c ("df1col" = "df2col")) |
Spojte 2 množiny údajov o viac ako jeden stĺpec - ponechajte všetky v množine 1, ale iba zhody v množine 2 | Pripojte sa | mydt <- zlúčiť (dt1, dt2, by.x = c ("dt1colA", "dt1colB"), by.y = c ("dt2colA", "dt2colB"), all.x = PRAVDA, all.y = FALSE ) #OR setkey (dt1, dt1colA, dt1colB) setkey (dt2, dt2colA, dt2colB) mydt <- dt2 [dt1] | myt <- left_join (df1, df2, by = c ("df1colA" = "df2colA", "df1colB" = "df2colB")) |
Spojte dve množiny údajov o jeden spoločný stĺpec; držte iba zápasy | Pripojte sa | mydt <- zlúčiť (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2") | myt <- inner_join (df1, df2, by = c ("df1col" = "df2col")) |
Spojte dve množiny údajov do jedného spoločného stĺpca a ponechajte všetky údaje v oboch množinách, bez ohľadu na to, či existujú alebo nie sú zhody | Pripojte sa | mydt <- zlúčiť (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2", všetko = PRAVDA) | myt <- full_join (df1, df2, by = c ("df1col" = "df2col")) |
Kombinujte dve množiny údajov pridaním riadkov od jedného k dolnému okraju druhého | Pripojte sa | mydt_joined <- rbindlist (zoznam (mydt, mydt2)) | myt_joined <- bind_rows (myt, myt2) |
Zmena tvaru údajov na širokú až dlhú | Preformovať | mydt_long <- melt (mydt, measure.vars = c ("col1", "col2", "col3"), variable.name = "NewCategoryColName", value.name = "NewValueColName") | myt_long <- pivot_longer (myt, cols = starts_with ("col"), names_to = "NewCategoryColName", values_to = "NewValueColName") |
Zmena tvaru údajov na dlhú šírku | Preformovať | mydt_wide <- dcast (mydt, id_col1 ~ col1, value.var = "ValueColName") | myt_wide <- pivot_wider (myt, names_from = col1, values_from = ValueColName) |
Reťazte viac výrazov | Hádka | mydt [expr1] [expr2] | myt% expr1%>% expr2 |
Exportujte údaje do súboru CSV | Export | fwrite (mydt, "myfile.csv") | write_csv (myt, "myfile.csv") |
Pripojiť riadky k existujúcemu súboru CSV | Export | fwrite (mydt2, "myfile.csv", append = TRUE) | vroom :: vroom_write (myt2, "myfile.csv", delim = ",", append = TRUE) |
Exportujte údaje do komprimovaného súboru CSV | Export | fwrite (mydt, "myfile.csv.gz", compress = "gzip") | vroom :: vroom_write (myt, "myfile2.csv.gz") |
O data.table sa dá naučiť oveľa viac! Niektoré základy tabuľky data.table si pozrite v mojom päťminútovom úvodnom videu:
Webová stránka data.table obsahuje mnoho ďalších informácií a tipov, ako je napríklad používanie setkey ()
a ďalšie tipy na indexovanie.