Hitrost. Kratka sintaksa. Združljivost nazaj.
Predvsem pa hitrost.
To je nekaj funkcij, zaradi katerih so podatki R-a privlačni za oboževalce.
Tudi če ste potrjeni uporabnik urejenosti (kot sem jaz), je data.table lahko koristen dodatek vašemu orodju R - zlasti pri delu z velikimi nabori podatkov, v aplikaciji Shiny ali v paketni funkciji.
Ta R data.table ultimate cheat sheet se razlikuje od mnogih drugih, ker je interaktivni. Iščete lahko določeno besedno zvezo, kot je dodaj stolpec ali po vrsti delovne skupine, kot je Podnabor ali Preoblikovanje. Poleg tega, ker ta goljufiv vsebuje tidyverse kodo za "prevajanje", lahko poiščete tudi najljubši glagol dplyr, kot je mutirati ali rowwise.
Registrirani uporabniki lahko prenesejo razširjeno različico te interaktivne tabele za uporabo v svojih sistemih! Prijava je brezplačna.
Iskanje po podatkih po tabeli in tidyverse opravilih in kodi
Naloga | Tip | data.table Koda | Koda Tidyverse |
---|---|---|---|
Preberite v datoteki CSV | Uvozi | mydt <- fread ("myfile.csv") | myt <- read_csv ("myfile.csv") # ALI myt <- vroom :: vroom ("myfile.csv") |
Uvozi prvih x število vrstic datoteke CSV | Uvozi | mydt_x <- fread ("myfile.csv", nrows = x) | myt_x <- read_csv ("myfile.csv", n_max = x) |
Uvozi samo tiste vrstice iz datoteke CSV, ki se ujemajo z določenim vzorcem | Uvozi | mydt_pattern <- fread ("grep 'mypattern' myfile.csv") | myt_pattern <- vroom :: vroom (cev ("grep 'mypattern' myfile.csv")) |
Uvozi stisnjeno datoteko .gz | Uvozi | mydt <- fread ("myfile.gz") | myt <- vroom :: vroom ("myfile.gz") |
Uvozi stisnjeno datoteko.zip | uvoz | mydt <- fread (cmd = 'unzip -cq myfile.zip') | myt <- read_csv ("myfile.zip") |
Ustvari podatkovno tabelo iz obstoječega podatkovnega okvira (tibble za tidyverse) | Uvozi | mydt <- as.data.table (mydf) # ALI setDT (mydf) | myt <- as_tibble (mydf) |
Spremenite data.table na mestu, ne da bi kopirali | Prepir | katera koli funkcija, ki se začne z nizom, kot je setkey (mydt, mycol) ali z uporabo operatorja: = v oklepajih | se ne uporablja |
Vrstice razvrstite na podlagi več vrednosti stolpcev | Prepir | mydt2 <- mydt [naročilo (colA, -colB)] # ALI setorder (mydt, colA, -colB) | myt <- poskrbi (myt, colA, -colB) |
Preimenuj stolpce | Prepir | imena imen (mydt, old = c ('colA', 'colB'), new = c ('NewColA', 'NewColB')) | myt <- preimenuj (myt, NewColA = colA, NewColB = colB) |
Preurejanje stolpcev: premaknite nekatere stolpce v sprednji (najbolj levi) položaj | Prepir | setcolorder (mydt, c ("colB", "colC")) # colB je zdaj v položaju 1 in colC v položaju 2 | myt <- premestitev (myt, colB, colC) |
Filtrirajte vrstice za številko vrstice n | Podnabor | mydt2 <- mydt [n] | myt2 <- rezina (myt, n) |
Filter za zadnjo vrstico | Podnabor | mydt2 <- mydt [.N] | myt2 <- rezina (myt, n ()) |
Filtriraj vrstice po pogojih | Podnabor | # V nekaterih primerih Setkey (mydt, colA, colB) pospeši delovanje # za logične teste na colA in colB; enako z drugimi stolpci mydt2 <- mydt [logični izraz] | myt2 <- filter (myt, logični izraz) |
Filtrirajte vrstice, kjer je colA enako string1 ali string2 | Podnabor | mydt2 <- mydt [colA% brada% c ("niz1", "niz2")] | myt2 <- filter (myt, colA% v% c ("string1", "string2")) |
Filtrirajte vrstice, kjer se colA ujema z regularnim izrazom | Podnabor | mydt2 <- mydt [colA% like% "mypattern"] | myt2 <- filter (myt, stringr :: str_detect (colA, "mypattern")) |
Filtrirajte vrstice, kjer so vrednosti colA med 2 številkama | Podnabor | mydt2 <- mydt [colA% med% c (n1, n2)] | myt2 <- filter (myt, med (colA, n1, n2)) |
Filter za prvih n vrstic po skupinah | Podnabor | mydt2 <- mydt [, .SD [1: n], avtor = groupcol] | myt2% group_by (groupcol)%>% rezina (1: n) |
Filtrirajte vrstice za največjo vrednost po skupinah | Podnabor | mydt2 <- mydt [, .SD [which.max (valcol)], avtor = groupcol] | myt2% group_by (groupcol)%>% filter (valcol == max (valcol)) |
Izberite stolpec in vrnite rezultate kot vektor | Podnabor | myvec <- mydt [, ime] | myvec <- pull (myt, colname) |
Izberite več stolpcev, da ustvarite novo data.table (podatkovni okvir ali tibble za tidyverse) | Podnabor | mydt2 <- mydt [, seznam (colA, colB)] # ALI mydt2 <- mydt [,. (colA, colB)] # ALI mydt2 <- mydt [, c ("colA", "colB")] | myt2 <- izberite (myt, colA, colB) |
Izberite več stolpcev s spremenljivko, ki vsebuje imena stolpcev | Podnabor | my_col_names <- c ("colA", "colB") mydt2 <- mydt [, ..my_col_names] # ALI mydt2 <- mydt [, my_col_names, with = FALSE] | my_col_names <- c ("colA", "colB") myt2 <- izberite (myt, all_of (my_col_names)) |
Izberite več stolpcev in nekatere preimenujte | Podnabor | mydt2 <- mydt [,. (novoime1 = col1, novoime2 = col2, col3)] | myt2 <- izberite (myt, newname1 = col1, newname2 = col2, col3) |
Izključite več stolpcev | Podnabor | mydt2 <- mydt [, -c ("colA", "colB")] # ALI mydt2 <- mydt [,! c ("colA", "colB")] # ALI my_col_names <- c ("colA", "colB") mydt2 <- mydt [,! .. my_col_names] | myt2 <- izberite (myt, -c (colA, colB)) # ALI my_col_names <- c ("colA", "colB") myt2 <- izberite (myt, - {{my_col_names}}) |
Odstranite podvojene vrstice na podlagi vrednosti v več stolpcih | Podnabor | mydt2 <- edinstven (mydt, by = c ("colA", "colB")) | myt2 <- različen (myt, colA, colB, .keep_all = TRUE) |
Štejte unikatne vrstice na podlagi več stolpcev | Povzemite | unikatN (mydt, po = c ("colA", "colB")) | nrow (razločen (myt, colA, colB)) |
Zaženite povzetke izračunov na podatkih | Povzemite | mydt2 <- mydt [, myfun (colA ...)] | myt2% povzetek (ColName = myfun (colA ...)) |
Izvedite povzetke izračunov za podatke ene skupine | Povzemite | mydt2 <- mydt [, myfun (colA ...), avtor = groupcol] | myt2% group_by (groupcol)%>% povzeti ( NewCol = myfun (colA ...) ) |
Zaženite povzetke izračunov za podatke ene skupine in poimenujte nov stolpec | Povzemite | mydt2 <- mydt [,. (MyNewCol = myfun (colA ...)), avtor = groupcol] | myt2% group_by (groupcol)%>% povzeti ( NewCol = myfun (colA ...) ) |
Izvedite povzetke izračunov za podatke po več skupinah | Povzemite | mydt2 <- mydt [, myfun (colA ...), avtor =. (groupcol1, groupcol2)] | myt2% group_by (groupcol1, groupcol2)%>% povzeti ( NewCol = myfun (colA ...) ) |
Zaženi povzetek izračuna za filtrirane podatke po več skupinah | Povzemite | mydt2 <- mydt [izraz filtra, myfun (colA), po =. (groupcol1, groupcol2)] | myt2% filter (izraz filtra)%>% group_by (groupcol1, groupcol2)%>% povzeti ( NewCol = myfun (colA), .groups = "obdrži" ) |
Štetje števila vrstic po skupinah | Povzemite | mydt2 <- mydt [,. N, by = groupcol] # za eno skupino # ALI mydt2 <- mydt [, .N, z =. (groupcol1, groupcol2)] | myt2 <- count (myt, groupcol) # za eno skupino # ALI myt2 <- count (myt, groupcol1, groupcol2) |
Povzemite več stolpcev in vrnite rezultate v več stolpcih | Povzemite | mydt2 <- mydt [, lapply (.SD, myfun), .SDcols = c ("colA", "colB")] | myt2% povzeti ( čez (c (colA, colB), myfun) ) |
Povzemite več stolpcev po skupinah in vrnite rezultate v več stolpcih | Povzemite | mydt2 <- mydt [, lapply (.SD, myfun), .SDcols = c ("colA", "colB"), avtor = groupcol] | myt2% group_by (groupcol)%>% povzetek (čez (c (colA, colB), myfun)) |
Dodajte stolpec | Izračunaj | mydt [, MyNewCol: = myfun (colA)] | myt% mutiraj ( MyNewCol = myfun (colA) ) |
Dodajte več stolpcev hkrati | Izračunaj | # uporabite katero koli funkcijo ali izraz mydt [, `: =` (NewCol1 = myfun (colA), NewCol2 = colB + colC)] # ALI mydt [, c ("NewCol1", "newCol2"): = seznam (myfun (colA), colB + colC)] | myt% mutiraj ( MyNewCol1 = myfun (colA), MyNewCol2 = colB + colC ) |
Stolpec dodajte z uporabo trenutnih in prejšnjih vrednosti iz drugega stolpca, na primer iskanje razlike med vrednostjo na datum v primerjavi s prejšnjim datumom | Izračunaj | mydt [, Diff: = colA - premik (colA)] | myt <- mutiraj (myt, Diff = colA - lag (colA)) |
Dodajte stolpec, ki se sklicuje na prejšnjo vrednost stolpca s strani skupine | Izračunaj | mydt2 <- mydt [, Diff: = colA - premik (colA), po = groupcol] | myt2% group_by (groupcol)%>% mutate (Diff = colA - lag (colA)) |
Dodajte stolpec z ID številkami vrstic po skupinah | Izračunaj | mydt [, myid: = 1: .N, avtor = groupcol] | myt% group_by (groupcol)%>% mutate (myid = row_number ()) |
Dodaj stolpec na podlagi več pogojev brez uporabe več stavkov if else (na primer SQL-ov CASE) | Izračunaj | # Potrebuje data.table različico 1.13 ali novejšo # Všeč mi je vsak pogoj v novi vrstici, vendar to ni obvezno mydt2 <- mydt [, NewCol: = fcase ( condition1, "Value1", condition2, "Value2", condition3, "Value3", default = "Other" # vrednost za vse ostalo )] | myt2% mutiraj ( NewCol = case_when ( pogoj1 ~ "Vrednost1", condition2 ~ "Vrednost2", condition3 ~ "Vrednost3", TRUE ~ "Drugo" ) ) |
Dodajanje stolpca z uporabo vrstice | Izračunaj | mydt [, newcol: = myfun (colB, colC, colD), avtor = 1: nrow (mydt)] # ali če ima colA vse edinstvene vrednosti mydt [, newcol: = myfun (colB, colC, colD), avtor = colA] | myt% rowwise ()%>% mutiraj ( newcol = myfun (colB, colC, colD) ) # ali myt% rowwise ()%>% mutiraj ( #use dplyr select sintaksa: newcol = myfun (c_across (colB: colD)) ) |
Združite dva nabora podatkov za več kot en stolpec; obdrži vse v naboru1, vendar le ujemanja v naboru2 | Pridružite se | mydt <- dt2 [dt1, on = c ("dt2col" = "dt1col")] # ALI mydt <- spajanje (dt1, dt2, by.x = "dt1col", by.y = "dt2col", all.x = TRUE) # ALI setkey (dt1, "dt1col") setkey (dt2, "dt2col") mydt <- dt2 [dt1] | myt <- left_join (df1, df2, by = c ("df1col" = "df2col")) |
Združite dva nabora podatkov z več kot enim stolpcem - vse naj ostanejo v nizu1, vendar le ujemanja v nizu2 | Pridružite se | mydt <- spajanje (dt1, dt2, by.x = c ("dt1colA", "dt1colB"), by.y = c ("dt2colA", "dt2colB"), all.x = TRUE, all.y = FALSE ) # ALI setkey (dt1, dt1colA, dt1colB) setkey (dt2, dt2colA, dt2colB) mydt <- dt2 [dt1] | myt <- left_join (df1, df2, by = c ("df1colA" = "df2colA", "df1colB" = "df2colB")) |
Združite dva nabora podatkov z enim skupnim stolpcem; hranite samo tekme | Pridružite se | mydt <- spajanje (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2") | myt <- inner_join (df1, df2, by = c ("df1col" = "df2col")) |
Združite dva nabora podatkov v en skupni stolpec in obdržite vse podatke v obeh naborih, ne glede na to, ali obstajajo ujemanja | Pridružite se | mydt <- spajanje (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2", vse = TRUE) | myt <- full_join (df1, df2, by = c ("df1col" = "df2col")) |
Združite dva nabora podatkov tako, da dodate vrstice iz enega na dno drugega | Pridružite se | mydt_joined <- rbindlist (seznam (mydt, mydt2)) | myt_joined <- bind_rows (myt, myt2) |
Preoblikujte podatke v široko v dolgo | Preoblikovanje | mydt_long <- stopi (mydt, measure.vars = c ("col1", "col2", "col3"), variable.name = "NewCategoryColName", value.name = "NewValueColName") | myt_long <- pivot_longer (myt, cols = start_with ("col"), names_to = "NewCategoryColName", values_to = "NewValueColName") |
Preoblikujte podatke v dolžino v širino | Preoblikovanje | mydt_wide <- dcast (mydt, id_col1 ~ col1, value.var = "ValueColName") | myt_wide <- pivot_wider (myt, names_from = col1, values_from = ValueColName) |
Veriga več izrazov | Prepir | mydt [expr1] [expr2] | myt% izraz1%>% izraz2 |
Izvozite podatke v datoteko CSV | Izvozi | fwrite (mydt, "myfile.csv") | write_csv (myt, "myfile.csv") |
V obstoječo datoteko CSV dodajte vrstice | Izvozi | fwrite (mydt2, "myfile.csv", dodaj = TRUE) | vroom :: vroom_write (myt2, "myfile.csv", delim = ",", append = TRUE) |
Izvozite podatke v stisnjeno datoteko CSV | Izvozi | fwrite (mydt, "myfile.csv.gz", stisni = "gzip") | vroom :: vroom_write (myt, "myfile2.csv.gz") |
O data.table se lahko še veliko naučite! Za nekaj osnov data.table si oglejte moj petminutni uvodni video:
Na koncu pa ima spletno mesto data.table veliko več informacij in nasvetov, kot je uporaba nastavljena tipka ()
in drugi nasveti za indeksiranje.