Programování

Konečný R data. Tabulka cheat sheet

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

ÚkolTypkód datové tabulkyTidyverse kód
Číst v souboru CSVImportmydt <- fread ("myfile.csv")myt <- read_csv ("myfile.csv") #OR myt <- vroom :: vroom ("myfile.csv")
Importujte prvních x počet řádků souboru CSVImportmydt_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 vzoruImportmydt_pattern <- fread ("grep 'mypattern' myfile.csv")myt_pattern <- vroom :: vroom (pipe ("grep 'mypattern' myfile.csv"))
Importujte komprimovaný soubor .gzImportmydt <- fread ("myfile.gz")myt <- vroom :: vroom ("myfile.gz")
Importujte komprimovaný soubor a.zipimportmydt <- 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)Importmydt <- as.data.table (mydf) #OR

setDT (mydf)

myt <- as_tibble (mydf)
Změňte data. Tabulka na místě bez kopírováníHádkajakákoli funkce, která začíná sadou, například setkey (mydt, mycol) nebo pomocí operátoru: = v závorkáchnepoužitelné
Pořadí řádků na základě více hodnot sloupcůHádkamydt2 <- mydt [order (colA, -colB)] #OR

setorder (mydt, colA, -colB)

myt <- uspořádat (myt, colA, -colB)
Přejmenovat sloupceHádkasetnames (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) polohyHádkasetcolorder (mydt, c ("colB", "colC")) # colB nyní na pozici 1 a colC na pozici 2myt <- přemístit (myt, colB, colC)
Filtrovat řádky pro číslo řádku nPodmnožinamydt2 <- mydt [n]myt2 <- řez (myt, n)
Filtr pro poslední řádekPodmnožinamydt2 <- mydt [.N]myt2 <- řez (myt, n ())
Filtrovat řádky podle podmínkyPodmnož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ězci2Podmnožinamydt2 <- mydt [colA% chin% c ("string1", "string2")]myt2 <- filtr (myt, colA% v% c ("string1", "string2"))
Filtrovat řádky, kde colA odpovídá regulárnímu výrazuPodmnožinamydt2 <- mydt [colA% like% "mypattern"]myt2 <- filtr (myt, stringr :: str_detect (colA, "mypattern"))
Filtrujte řádky, kde jsou hodnoty colA mezi 2 číslyPodmnožinamydt2 <- mydt [colA% mezi% c (n1, n2)]myt2 <- filtr (myt, mezi (colA, n1, n2))
Filtrování prvních n řádků podle skupinyPodmnožinamydt2 <- mydt [, .SD [1: n], autor = groupcol]myt2% group_by (groupcol)%>% slice (1: n)
Filtrujte řádky podle maximální hodnoty podle skupinyPodmnožinamydt2 <- mydt [, .SD [which.max (valcol)], by = groupcol]myt2% group_by (groupcol)%>% filtr (valcol == max (valcol))
Vyberte sloupec a výsledky vraťte jako vektorPodmnožinamyvec <- 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žinamydt2 <- 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žinamy_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řejmenujtePodmnožinamydt2 <- mydt [,. (newname1 = col1, newname2 = col2, col3)]myt2 <- vyberte (myt, newname1 = col1, newname2 = col2, col3)
Vyloučit více sloupcůPodmnožinamydt2 <- 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íchPodmnožinamydt2 <- 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ůShrnoutuniqueN (mydt, by = c ("colA", "colB"))nrow (odlišný (myt, colA, colB))
Spusťte souhrnné výpočty na datechShrnoutmydt2 <- mydt [, myfun (colA ...)]myt2% shrnout (ColName = myfun (colA ...))
Spusťte souhrnné výpočty na datech jednou skupinouShrnoutmydt2 <- 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ý sloupecShrnoutmydt2 <- 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 skupinShrnoutmydt2 <- 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 skupinShrnoutmydt2 <- 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 skupinShrnoutmydt2 <- 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ůShrnoutmydt2 <- 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ůShrnoutmydt2 <- mydt [, lapply (.SD, myfun),

.SDcols = c ("colA", "colB"), podle = groupcol]

myt2%

group_by (groupcol)%>%

shrnout (napříč (c (colA, colB), myfun))

Přidejte sloupecVypočítatmydt [, MyNewCol: = myfun (colA)] myt%

mutovat(

MyNewCol = myfun (colA)

)

Přidejte více sloupců najednouVypočí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 datemVypočítatmydt [, Diff: = colA - shift (colA)]myt <- mutovat (myt, Diff = colA - zpoždění (colA))
Přidejte sloupec odkazující na předchozí hodnotu sloupce skupinouVypočítatmydt2 <- 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 skupinyVypočítatmydt [, 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 řádkuVypočítatmydt [, 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 set2Připojitmydt <- 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 setu2Připojitmydt <- 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ápasyPřipojitmydt <- 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 nePřipojitmydt <- 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řipojitmydt_joined <- rbindlist (seznam (mydt, mydt2))myt_joined <- bind_rows (myt, myt2)
Změna tvaru dat na širokou až dlouhouPřeformovatmydt_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 šířkuPřeformovatmydt_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ádkamydt [expr1] [expr2]myt%

expr1%>%

expr2

Exportujte data do souboru CSVVývoznífwrite (mydt, "myfile.csv")write_csv (myt, "myfile.csv")
Připojit řádky k existujícímu souboru CSVVývoznífwrite (mydt2, "myfile.csv", append = TRUE)vroom :: vroom_write (myt2, "myfile.csv", delim = ",", append = TRUE)
Exportujte data do komprimovaného souboru CSVVý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í.

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