Fart. Kortfattet syntaks. Bagudkompatibilitet.
Men især hastighed.
Det er nogle af de funktioner, der gør R's data. Tabel overbevisende for sine fans.
Og selvom du er en bekræftet tidyverse bruger (som jeg er), kan data.table være en nyttig tilføjelse til dit R-værktøjssæt - især når du arbejder med store datasæt, i en skinnende app eller i en pakkefunktion.
Dette ultimative snydeark med R-data.tabel adskiller sig fra mange andre, fordi det er interaktiv. Du kan søge efter en bestemt sætning som tilføj kolonne eller af en type opgavegruppe som f.eks Delmængde eller Omform. Derudover, fordi dette snydeark indeholder tidyverse "oversættelseskode", kan du også søge efter et yndlings dplyr-verb, f.eks. mutere eller i række.
Registrerede brugere kan downloade en udvidet version af denne interaktive tabel til brug på deres egne systemer! Registrering er gratis.
Søg data.table og tidyverse opgaver og kode
Opgave | Type | datatabelkode | Tidyverse kode |
---|---|---|---|
Læs i CSV-fil | Importere | mydt <- fread ("myfile.csv") | myt <- read_csv ("myfile.csv") #OR myt <- vroom :: vroom ("myfile.csv") |
Importer det første x antal rækker i en CSV-fil | Importere | mydt_x <- fread ("myfile.csv", nrows = x) | myt_x <- read_csv ("myfile.csv", n_max = x) |
Importer kun de rækker fra en CSV-fil, der matcher et bestemt mønster | Importere | mydt_pattern <- fread ("grep 'mypattern' myfile.csv") | myt_pattern <- vroom :: vroom (pipe ("grep 'mypattern' myfile.csv")) |
Importer en .gz komprimeret fil | Importere | mydt <- fread ("myfile.gz") | myt <- vroom :: vroom ("myfile.gz") |
Importer en komprimeret.zip-fil | importere | mydt <- fread (cmd = 'unzip -cq myfile.zip') | myt <- read_csv ("myfile.zip") |
Opret datatabel fra eksisterende dataramme (tibble for tidyverse) | Importere | mydt <- som.data.table (mydf) #OR setDT (mydf) | myt <- som_tibble (mydf) |
Skift data.table på plads uden at lave en kopi | Wrangle | enhver funktion, der starter med sæt som f.eks. sætkey (mydt, mycol) eller ved hjælp af: = operatoren inden for parentes | ikke anvendelig |
Bestil rækker baseret på flere kolonneværdier | Wrangle | mydt2 <- mydt [rækkefølge (colA, -colB)] #OR sætorden (mydt, colA, -colB) | myt <- arranger (myt, colA, -colB) |
Omdøb kolonner | Wrangle | sætnavne (mydt, old = c ('colA', 'colB'), new = c ('NewColA', 'NewColB')) | myt <- omdøb (myt, NewColA = colA, NewColB = colB) |
Omarrangere kolonner: Flyt nogle kolonner til den forreste (længst til venstre) position | Wrangle | sætfarve (mydt, c ("colB", "colC")) # colB nu i position 1 og colC i position 2 | myt <- flyt (myt, colB, colC) |
Filtrer rækker for række nummer n | Delmængde | mydt2 <- mydt [n] | myt2 <- skive (myt, n) |
Filtrer til sidste række | Delmængde | mydt2 <- mydt [.N] | myt2 <- skive (myt, n ()) |
Filtrer rækker efter tilstand | Delmængde | # I nogle tilfælde vil setkey (mydt, colA, colB) fremskynde ydeevnen # for logiske tests på colA og colB; det samme med andre kolonner mydt2 <- mydt [logisk udtryk] | myt2 <- filter (myt, logisk udtryk) |
Filtrer rækker, hvor colA er lig med streng1 eller streng2 | Delmængde | mydt2 <- mydt [colA% chin% c ("string1", "string2")] | myt2 <- filter (myt, colA% i% c ("string1", "string2")) |
Filtrer rækker, hvor colA matcher et regulært udtryk | Delmængde | mydt2 <- mydt [colA% som% "mypattern"] | myt2 <- filter (myt, stringr :: str_detect (colA, "mypattern")) |
Filtrer rækker, hvor colA-værdier er mellem 2 tal | Delmængde | mydt2 <- mydt [colA% mellem% c (n1, n2)] | myt2 <- filter (myt, mellem (colA, n1, n2)) |
Filtrer efter første n række efter gruppe | Delmængde | mydt2 <- mydt [, .SD [1: n], af = groupcol] | myt2% group_by (groupcol)%>% udsnit (1: n) |
Filtrer rækker for maksimal værdi efter gruppe | Delmængde | mydt2 <- mydt [, .SD [which.max (valcol)], af = groupcol] | myt2% group_by (groupcol)%>% filter (valcol == max (valcol)) |
Vælg kolonne, og returner resultater som en vektor | Delmængde | myvec <- mydt [, colname] | myvec <- pull (myt, colname) |
Vælg flere kolonner for at oprette en ny data.tabel (dataramme eller tibble for tidyverse) | Delmængde | mydt2 <- mydt [, liste (colA, colB)] #OR mydt2 <- mydt [,. (colA, colB)] #OR mydt2 <- mydt [, c ("colA", "colB")] | myt2 <- vælg (myt, colA, colB) |
Vælg flere kolonner ved hjælp af en variabel, der indeholder kolonnenavnene | Delmængde | my_col_names <- c ("colA", "colB") mydt2 <- mydt [, ..my_col_names] #OR mydt2 <- mydt [, my_col_names, med = FALSE] | my_col_names <- c ("colA", "colB") myt2 <- vælg (myt, all_of (my_col_names)) |
Vælg flere kolonner, og omdøb dem | Delmængde | mydt2 <- mydt [,. (newname1 = col1, newname2 = col2, col3)] | myt2 <- vælg (myt, newname1 = col1, newname2 = col2, col3) |
Ekskluder flere kolonner | Delmængde | mydt2 <- mydt [, -c ("colA", "colB")] #OR mydt2 <- mydt [,! c ("colA", "colB")] #OR my_col_names <- c ("colA", "colB") mydt2 <- mydt [,! .. my_col_names] | myt2 <- vælg (myt, -c (colA, colB)) #OR my_col_names <- c ("colA", "colB") myt2 <- vælg (myt, - {{my_col_names}}) |
Fjern dublerede rækker baseret på værdier i flere kolonner | Delmængde | mydt2 <- unik (mydt, by = c ("colA", "colB")) | myt2 <- tydelig (myt, colA, colB, .keep_all = TRUE) |
Tæl unikke rækker baseret på flere kolonner | Sammenfatte | uniqueN (mydt, by = c ("colA", "colB")) | nrow (distinkt (myt, colA, colB)) |
Kør sammenfattende beregninger på data | Sammenfatte | mydt2 <- mydt [, myfun (colA ...)] | myt2% opsummer (ColName = myfun (colA ...)) |
Kør sammenfattende beregninger på data efter en gruppe | Sammenfatte | mydt2 <- mydt [, myfun (colA ...), af = groupcol] | myt2% group_by (groupcol)%>% sammenfatte( NewCol = myfun (colA ...) ) |
Kør sammenfattende beregninger på data efter en gruppe, og navngiv den nye kolonne | Sammenfatte | mydt2 <- mydt [,. (MyNewCol = myfun (colA ...)), af = groupcol] | myt2% group_by (groupcol)%>% sammenfatte( NewCol = myfun (colA ...) ) |
Kør sammenfattende beregninger på data fra flere grupper | Sammenfatte | mydt2 <- mydt [, myfun (colA ...), af =. (groupcol1, groupcol2)] | myt2% group_by (groupcol1, groupcol2)%>% sammenfatte( NewCol = myfun (colA ...) ) |
Kør oversigtsberegning på filtrerede data efter flere grupper | Sammenfatte | mydt2 <- mydt [filterudtryk, myfun (colA), ved =. (groupcol1, groupcol2)] | myt2% filter (filterudtryk)%>% group_by (groupcol1, groupcol2)%>% sammenfatte( NewCol = myfun (colA), .groups = "keep" ) |
Tæl antal rækker efter grupper | Sammenfatte | mydt2 <- mydt [,. N, af = groupcol] #for en gruppe #OR mydt2 <- mydt [, .N, by =. (groupcol1, groupcol2)] | myt2 <- count (myt, groupcol) #for en gruppe #OR myt2 <- count (myt, groupcol1, groupcol2) |
Opsummer flere kolonner og returner resultater i flere kolonner | Sammenfatte | mydt2 <- mydt [, lapply (.SD, myfun), .SDcols = c ("colA", "colB")] | myt2% sammenfatte( på tværs af (c (colA, colB), myfun) ) |
Opsummer flere kolonner efter gruppe, og returner resultater i flere kolonner | Sammenfatte | mydt2 <- mydt [, lapply (.SD, myfun), .Sdcols = c ("colA", "colB"), efter = groupcol] | myt2% group_by (groupcol)%>% opsummer (på tværs af (c (colA, colB), myfun)) |
Tilføj en kolonne | Beregn | mydt [, MyNewCol: = myfun (colA)] | myt% mutere ( MyNewCol = myfun (colA) ) |
Tilføj flere kolonner på én gang | Beregn | # brug en hvilken som helst funktion eller et udtryk mydt [, `: =` (NewCol1 = myfun (colA), NewCol2 = colB + colC)] #OR mydt [, c ("NewCol1", "newCol2"): = liste (myfun (colA), colB + colC)] | myt% mutere ( MyNewCol1 = myfun (colA), MyNewCol2 = colB + colC ) |
Tilføj kolonne ved hjælp af aktuelle og tidligere værdier fra en anden kolonne, såsom at finde forskellen mellem værdi på en dato vs. den foregående dato | Beregn | mydt [, Diff: = colA - shift (colA)] | myt <- mutere (myt, Diff = colA - lag (colA)) |
Tilføj kolonne, der henviser til den tidligere værdi af en kolonne af en gruppe | Beregn | mydt2 <- mydt [, Diff: = colA - shift (colA), by = groupcol] | myt2% group_by (groupcol)%>% mutate (Diff = colA - lag (colA)) |
Tilføj kolonne med række-ID-numre efter gruppe | Beregn | mydt [, myid: = 1: .N, by = groupcol] | myt% group_by (groupcol)%>% mutate (myid = row_number ()) |
Tilføj kolonne baseret på flere betingelser uden at bruge flere hvis ellers udsagn (som SQL's CASE) | Beregn | # Har brug for data.table version 1.13 eller nyere # Jeg kan godt lide hver betingelse på en ny linje, men det er ikke nødvendigt mydt2 <- mydt [, NewCol: = fcase ( betingelse1, "Værdi1", betingelse2, "Værdi2", betingelse3, "Værdi3", default = "Andet" # værdi for alt andet )] | myt2% mutere ( NewCol = case_when ( betingelse1 ~ "Værdi1", betingelse2 ~ "Værdi2", betingelse3 ~ "Værdi3", SAND ~ "Andet" ) ) |
Tilføj kolonne via drift efter række | Beregn | mydt [, newcol: = myfun (colB, colC, colD), ved = 1: nrow (mydt)] # eller hvis colA har alle unikke værdier mydt [, newcol: = myfun (colB, colC, colD), by = colA] | myt% rækkevis ()%>% mutere ( newcol = myfun (colB, colC, colD) ) # eller myt% rækkevis ()%>% mutere ( # brug dplyr vælg syntaks: newcol = myfun (c_across (colB: colD)) ) |
Deltag i to datasæt med mere end en kolonne; hold alt i sæt1, men kun match i sæt2 | Tilslutte | mydt <- dt2 [dt1, on = c ("dt2col" = "dt1col")] # ELLER mydt <- flet (dt1, dt2, by.x = "dt1col", by.y = "dt2col", all.x = SAND) # ELLER setkey (dt1, "dt1col") setkey (dt2, "dt2col") mydt <- dt2 [dt1] | myt <- left_join (df1, df2, by = c ("df1col" = "df2col")) |
Deltag i 2 datasæt med mere end en kolonne - hold alt i sæt1, men match kun i sæt2 | Tilslutte | mydt <- flet (dt1, dt2, by.x = c ("dt1colA", "dt1colB"), by.y = c ("dt2colA", "dt2colB"), all.x = TRUE, all.y = FALSE ) # ELLER sæt nøgle (dt1, dt1colA, dt1colB) sætnøgle (dt2, dt2colA, dt2colB) mydt <- dt2 [dt1] | myt <- left_join (df1, df2, by = c ("df1colA" = "df2colA", "df1colB" = "df2colB")) |
Deltag i to datasæt med en fælles kolonne; kun holde tændstikker | Tilslutte | mydt <- flet (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2") | myt <- inner_join (df1, df2, by = c ("df1col" = "df2col")) |
Deltag i to datasæt med en fælles kolonne, og opbevar alle data i begge sæt, uanset om der er matches | Tilslutte | mydt <- flet (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2", alt = SAND) | myt <- full_join (df1, df2, by = c ("df1col" = "df2col")) |
Kombiner to datasæt ved at tilføje rækker fra en til bunden af en anden | Tilslutte | mydt_joined <- rbindlist (liste (mydt, mydt2)) | myt_joined <- bind_rows (myt, myt2) |
Omform data bredt til langt | Omform | 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") |
Omform data lang til bred | Omform | mydt_wide <- dcast (mydt, id_col1 ~ col1, value.var = "ValueColName") | myt_wide <- pivot_wider (myt, names_from = col1, values_from = ValueColName) |
Kæd flere udtryk | Wrangle | mydt [expr1] [expr2] | myt% ekspr1%>% ekspr2 |
Eksporter data til en CSV-fil | Eksport | fwrite (mydt, "myfile.csv") | write_csv (myt, "myfile.csv") |
Føj rækker til en eksisterende CSV-fil | Eksport | fwrite (mydt2, "myfile.csv", append = TRUE) | vroom :: vroom_write (myt2, "myfile.csv", delim = ",", append = TRUE) |
Eksporter data til en komprimeret CSV-fil | Eksport | fwrite (mydt, "myfile.csv.gz", compress = "gzip") | vroom :: vroom_write (myt, "myfile2.csv.gz") |
Der er meget mere at lære om data.table! For nogle grundlæggende data.table, tjek min introduktionsvideo på fem minutter:
Endelig har webstedet data.table meget mere information og tip, såsom brug sæt nøgle ()
og andre indekseringstip.