Rychlost. Stručná syntaxe. Zpětná kompatibilita.
Ale hlavně rychlost.
To jsou některé z funkcí, díky nimž je R's data.table pro své fanoušky přitažlivý.
A i když jste potvrzeným tidyverse uživatelem (jako jsem já), data.table může být užitečným doplňkem k vaší sadě nástrojů R - zejména při práci s velkými datovými sadami, v aplikaci Shiny nebo ve funkci balíčku.
Tato podváděcí tabulka R data.table se liší od mnoha jiných, protože je interaktivní. Můžete vyhledat konkrétní frázi jako přidat sloupec nebo podle typu skupiny úkolů, jako je Podmnožina nebo Přeformovat. Kromě toho, protože tento podváděcí list obsahuje uklizený „překladový“ kód, můžete také vyhledat oblíbené sloveso dplyr, například mutovat nebo po řádcích.
Registrovaní uživatelé si mohou stáhnout rozšířenou verzi této interaktivní tabulky pro použití ve svých vlastních systémech! Registrace je zdarma.
Prohledávejte data a tabulky a úhledné úkoly a kód
Úkol | Typ | kód datové tabulky | Tidyverse kód |
---|---|---|---|
Číst v souboru CSV | Import | mydt <- fread ("myfile.csv") | myt <- read_csv ("myfile.csv") #OR myt <- vroom :: vroom ("myfile.csv") |
Importujte prvních x počet řádků souboru CSV | Import | mydt_x <- fread ("myfile.csv", nrows = x) | myt_x <- read_csv ("myfile.csv", n_max = x) |
Importujte pouze ty řádky ze souboru CSV, které odpovídají určitému vzoru | Import | mydt_pattern <- fread ("grep 'mypattern' myfile.csv") | myt_pattern <- vroom :: vroom (pipe ("grep 'mypattern' myfile.csv")) |
Importujte komprimovaný soubor .gz | Import | mydt <- fread ("myfile.gz") | myt <- vroom :: vroom ("myfile.gz") |
Importujte komprimovaný soubor a.zip | import | mydt <- fread (cmd = 'unzip -cq myfile.zip') | myt <- read_csv ("myfile.zip") |
Vytvořit datovou tabulku z existujícího datového rámce (tibble pro tidyverse) | Import | mydt <- as.data.table (mydf) #OR setDT (mydf) | myt <- as_tibble (mydf) |
Změňte data. Tabulka na místě bez kopírování | Hádka | jakákoli funkce, která začíná sadou, například setkey (mydt, mycol) nebo pomocí operátoru: = v závorkách | nepoužitelné |
Pořadí řádků na základě více hodnot sloupců | Hádka | mydt2 <- mydt [order (colA, -colB)] #OR setorder (mydt, colA, -colB) | myt <- uspořádat (myt, colA, -colB) |
Přejmenovat sloupce | Hádka | setnames (mydt, old = c ('colA', 'colB'), new = c ('NewColA', 'NewColB')) | myt <- přejmenovat (myt, NewColA = colA, NewColB = colB) |
Změna pořadí sloupců: Přesuňte některé sloupce do přední (nejvíce vlevo) polohy | Hádka | setcolorder (mydt, c ("colB", "colC")) # colB nyní na pozici 1 a colC na pozici 2 | myt <- přemístit (myt, colB, colC) |
Filtrovat řádky pro číslo řádku n | Podmnožina | mydt2 <- mydt [n] | myt2 <- řez (myt, n) |
Filtr pro poslední řádek | Podmnožina | mydt2 <- mydt [.N] | myt2 <- řez (myt, n ()) |
Filtrovat řádky podle podmínky | Podmnožina | # V některých případech setkey (mydt, colA, colB) zrychlí výkon # pro logické testy na colA a colB; stejně jako ostatní sloupce mydt2 <- mydt [logický výraz] | myt2 <- filtr (myt, logický výraz) |
Filtrovat řádky, kde colA se rovná řetězci1 nebo řetězci2 | Podmnožina | mydt2 <- mydt [colA% chin% c ("string1", "string2")] | myt2 <- filtr (myt, colA% v% c ("string1", "string2")) |
Filtrovat řádky, kde colA odpovídá regulárnímu výrazu | Podmnožina | mydt2 <- mydt [colA% like% "mypattern"] | myt2 <- filtr (myt, stringr :: str_detect (colA, "mypattern")) |
Filtrujte řádky, kde jsou hodnoty colA mezi 2 čísly | Podmnožina | mydt2 <- mydt [colA% mezi% c (n1, n2)] | myt2 <- filtr (myt, mezi (colA, n1, n2)) |
Filtrování prvních n řádků podle skupiny | Podmnožina | mydt2 <- mydt [, .SD [1: n], autor = groupcol] | myt2% group_by (groupcol)%>% slice (1: n) |
Filtrujte řádky podle maximální hodnoty podle skupiny | Podmnožina | mydt2 <- mydt [, .SD [which.max (valcol)], by = groupcol] | myt2% group_by (groupcol)%>% filtr (valcol == max (valcol)) |
Vyberte sloupec a výsledky vraťte jako vektor | Podmnožina | myvec <- mydt [, colname] | myvec <- vytáhnout (myt, colname) |
Vyberte více sloupců a vytvořte novou datovou tabulku (datový rámec nebo tibble pro tidyverse) | Podmnožina | mydt2 <- mydt [, seznam (colA, colB)] # NEBO mydt2 <- mydt [,. (colA, colB)] #OR mydt2 <- mydt [, c ("colA", "colB")] | myt2 <- vyberte (myt, colA, colB) |
Vyberte více sloupců pomocí proměnné obsahující názvy sloupců | Podmnožina | my_col_names <- c ("colA", "colB") mydt2 <- mydt [, ..my_col_names] # NEBO mydt2 <- mydt [, my_col_names, with = FALSE] | my_col_names <- c ("colA", "colB") myt2 <- select (myt, all_of (my_col_names)) |
Vyberte více sloupců a některé přejmenujte | Podmnožina | mydt2 <- mydt [,. (newname1 = col1, newname2 = col2, col3)] | myt2 <- vyberte (myt, newname1 = col1, newname2 = col2, col3) |
Vyloučit více sloupců | 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}}) |
Odeberte duplicitní řádky na základě hodnot ve více sloupcích | Podmnožina | mydt2 <- jedinečný (mydt, by = c ("colA", "colB")) | myt2 <- odlišné (myt, colA, colB, .keep_all = TRUE) |
Počítat jedinečné řádky na základě více sloupců | Shrnout | uniqueN (mydt, by = c ("colA", "colB")) | nrow (odlišný (myt, colA, colB)) |
Spusťte souhrnné výpočty na datech | Shrnout | mydt2 <- mydt [, myfun (colA ...)] | myt2% shrnout (ColName = myfun (colA ...)) |
Spusťte souhrnné výpočty na datech jednou skupinou | Shrnout | mydt2 <- mydt [, myfun (colA ...), by = groupcol] | myt2% group_by (groupcol)%>% shrnout( NewCol = myfun (colA ...) ) |
Spusťte souhrnné výpočty dat podle jedné skupiny a pojmenujte nový sloupec | Shrnout | mydt2 <- mydt [,. (MyNewCol = myfun (colA ...)), by = groupcol] | myt2% group_by (groupcol)%>% shrnout( NewCol = myfun (colA ...) ) |
Spouštějte souhrnné výpočty dat podle více skupin | Shrnout | mydt2 <- mydt [, myfun (colA ...), podle =. (groupcol1, groupcol2)] | myt2% group_by (groupcol1, groupcol2)%>% shrnout( NewCol = myfun (colA ...) ) |
Spusťte souhrnný výpočet filtrovaných dat podle více skupin | Shrnout | mydt2 <- mydt [filtrovat výraz, myfun (colA), podle =. (groupcol1, groupcol2)] | myt2% filtr (výraz filtru)%>% group_by (groupcol1, groupcol2)%>% shrnout( NewCol = myfun (colA), .groups = "keep" ) |
Počítat počet řádků podle skupin | Shrnout | mydt2 <- mydt [,. N, podle = groupcol] # pro jednu skupinu # NEBO mydt2 <- mydt [, .N, podle =. (groupcol1, groupcol2)] | myt2 <- count (myt, groupcol) # pro jednu skupinu # NEBO myt2 <- počet (myt, groupcol1, groupcol2) |
Shrňte více sloupců a vraťte výsledky do více sloupců | Shrnout | mydt2 <- mydt [, lapply (.SD, myfun), .SDcols = c ("colA", "colB")] | myt2% shrnout( napříč (c (colA, colB), myfun) ) |
Shrňte více sloupců podle skupin a vraťte výsledky do více sloupců | Shrnout | mydt2 <- mydt [, lapply (.SD, myfun), .SDcols = c ("colA", "colB"), podle = groupcol] | myt2% group_by (groupcol)%>% shrnout (napříč (c (colA, colB), myfun)) |
Přidejte sloupec | Vypočítat | mydt [, MyNewCol: = myfun (colA)] | myt% mutovat( MyNewCol = myfun (colA) ) |
Přidejte více sloupců najednou | Vypočítat | # použijte jakoukoli funkci nebo výraz mydt [, `: =` (NewCol1 = myfun (colA), NewCol2 = colB + colC)] #OR mydt [, c ("NewCol1", "newCol2"): = list (myfun (colA), colB + colC)] | myt% mutovat( MyNewCol1 = myfun (colA), MyNewCol2 = colB + colC ) |
Přidejte sloupec pomocí aktuálních a předchozích hodnot z jiného sloupce, například vyhledáním rozdílu mezi hodnotou k datu a předchozím datem | Vypočítat | mydt [, Diff: = colA - shift (colA)] | myt <- mutovat (myt, Diff = colA - zpoždění (colA)) |
Přidejte sloupec odkazující na předchozí hodnotu sloupce skupinou | Vypočítat | mydt2 <- mydt [, Diff: = colA - shift (colA), by = groupcol] | myt2% group_by (groupcol)%>% mutovat (Diff = colA - zpoždění (colA)) |
Přidejte sloupec s ID čísly řádků podle skupiny | Vypočítat | mydt [, myid: = 1: .N, od = groupcol] | myt% group_by (groupcol)%>% mutovat (myid = číslo_řádku ()) |
Přidejte sloupec na základě několika podmínek bez použití více příkazů if else (například PŘÍPAD SQL) | Vypočítat | # Vyžaduje data.table verze 1.13 nebo novější # Líbí se mi každá podmínka na novém řádku, ale to není nutné mydt2 <- mydt [, NewCol: = fcase ( podmínka1, "Hodnota1", podmínka2, "Hodnota2", podmínka3, "Hodnota3", default = "Other" # hodnota pro všechny ostatní )] | myt2% mutovat( NewCol = case_when ( podmínka1 ~ "Hodnota1", podmínka2 ~ "Hodnota2", podmínka3 ~ "Hodnota3", TRUE ~ "Jiné" ) ) |
Přidejte sloupec pomocí operace po řádku | Vypočítat | mydt [, newcol: = myfun (colB, colC, colD), o = 1: nrow (mydt)] # nebo pokud má colA všechny jedinečné hodnoty mydt [, newcol: = myfun (colB, colC, colD), by = colA] | myt% po řádcích ()%>% mutovat( newcol = myfun (colB, colC, colD) ) # nebo myt% po řádcích ()%>% mutovat( #use dplyr vyberte syntaxi: newcol = myfun (c_across (colB: colD)) ) |
Spojte dvě sady dat o více než jeden sloupec; zachovat vše v set1, ale pouze zápasy v set2 | Připojit | mydt <- dt2 [dt1, on = c ("dt2col" = "dt1col")] #OR mydt <- sloučit (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 datové sady o více než jeden sloupec - ponechte všechny v set1, ale pouze v setu2 | Připojit | mydt <- sloučit (dt1, dt2, by.x = c ("dt1colA", "dt1colB"), by.y = c ("dt2colA", "dt2colB"), all.x = PRAVDA, all.y = FALSE ) # NEBO setkey (dt1, dt1colA, dt1colB) setkey (dt2, dt2colA, dt2colB) mydt <- dt2 [dt1] | myt <- left_join (df1, df2, by = c ("df1colA" = "df2colA", "df1colB" = "df2colB")) |
Spojte dvě sady dat jedním společným sloupcem; udržujte pouze zápasy | Připojit | mydt <- sloučit (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2") | myt <- inner_join (df1, df2, by = c ("df1col" = "df2col")) |
Spojte dvě sady dat o jeden společný sloupec a ponechte všechna data v obou sadách, ať už existují shody nebo ne | Připojit | mydt <- sloučit (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2", vše = PRAVDA) | myt <- full_join (df1, df2, by = c ("df1col" = "df2col")) |
Zkombinujte dvě sady dat přidáním řádků z jedné do dolní části druhé | Připojit | mydt_joined <- rbindlist (seznam (mydt, mydt2)) | myt_joined <- bind_rows (myt, myt2) |
Změna tvaru dat na širokou až dlouhou | Přeformovat | 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") |
Změna tvaru dat na dlouhou šířku | Přeformovat | mydt_wide <- dcast (mydt, id_col1 ~ col1, value.var = "ValueColName") | myt_wide <- pivot_wider (myt, names_from = col1, values_from = ValueColName) |
Řetěz více výrazů | Hádka | mydt [expr1] [expr2] | myt% expr1%>% expr2 |
Exportujte data do souboru CSV | Vývozní | fwrite (mydt, "myfile.csv") | write_csv (myt, "myfile.csv") |
Připojit řádky k existujícímu souboru CSV | Vývozní | fwrite (mydt2, "myfile.csv", append = TRUE) | vroom :: vroom_write (myt2, "myfile.csv", delim = ",", append = TRUE) |
Exportujte data do komprimovaného souboru CSV | Vývozní | fwrite (mydt, "myfile.csv.gz", compress = "gzip") | vroom :: vroom_write (myt, "myfile2.csv.gz") |
O datové tabulce se toho můžete dozvědět mnohem více! Některé základy tabulky data.table, podívejte se na mé pětiminutové úvodní video:
Nakonec web data.table obsahuje mnoho dalších informací a tipů, například používání setkey ()
a další tipy pro indexování.