Ātrums. Kodolīga sintakse. Saderība atpakaļ.
Bet īpaši ātrums.
Šīs ir dažas funkcijas, kas padara R’s data.table pievilcīgu tā faniem.
Pat ja jūs esat apstiprināts kārtīgs lietotājs (tāds pats kā es esmu), data.table var būt noderīgs papildinājums jūsu R rīkkopai - it īpaši, strādājot ar lielām datu kopām, Shiny lietotnē vai pakotnes funkcijā.
Šī R data.table galīgā apkrāptu lapa atšķiras no daudzām citām, jo tā ir interaktīvs. Jūs varat meklēt noteiktu frāzi, piemēram, pievienot kolonnu vai pēc uzdevumu grupas veida, piemēram, Apakškopa vai Pārveidojiet. Turklāt, tā kā šajā apkrāptu lapā ir ietverts tidyverse “translation” kods, varat meklēt arī iecienītāko darbības vārdu, piemēram, mutēt vai pēc kārtas.
Reģistrētie lietotāji var lejupielādēt šīs interaktīvās tabulas izvērsto versiju izmantošanai savās sistēmās! Reģistrācija ir bezmaksas.
Meklēt datus.table un kārtot uzdevumus un kodu
Uzdevums | Tips | dati.tabulas kods | Tidiversas kods |
---|---|---|---|
Lasīt CSV failā | Importēt | mydt <- fread ("myfile.csv") | myt <- read_csv ("myfile.csv") # OR myt <- vroom :: vroom ("myfile.csv") |
Importējiet pirmās x CSV faila rindu skaitu | Importēt | mydt_x <- fread ("myfile.csv", nrows = x) | myt_x <- lasīt_csv ("myfile.csv", n_max = x) |
No CSV faila importējiet tikai tās rindas, kas atbilst noteiktam paraugam | Importēt | mydt_pattern <- fread ("grep 'mypattern' myfile.csv") | myt_pattern <- vroom :: vroom (pipe ("grep 'mypattern' myfile.csv")) |
Importējiet saspiestu .gz failu | Importēt | mydt <- fread ("myfile.gz") | myt <- vroom :: vroom ("myfile.gz") |
Importējiet saspiestu a.zip failu | importēt | mydt <- fread (cmd = 'unzip -cq myfile.zip') | myt <- lasīt_csv ("myfile.zip") |
Izveidot datu tabulu no esošā datu rāmja (tibble for tidyverse) | Importēt | mydt <- as.data.table (mydf) # VAI setDT (mydf) | myt <- as_tibble (mydf) |
Mainīt datus. Tabula vietā, neveidojot kopiju | Strīdēties | jebkura funkcija, kas sākas ar kopu, piemēram, setkey (mydt, mycol) vai iekavās tiek izmantots: = operators | nav piemērojams |
Kārtot rindas, pamatojoties uz vairākām kolonnu vērtībām | Strīdēties | mydt2 <- mydt [secība (colA, -colB)] # VAI setorder (mydt, colA, -colB) | myt <- sakārtot (myt, colA, -colB) |
Pārdēvēt kolonnas | Strīdēties | setnames (mydt, old = c ('colA', 'colB'), new = c ('NewColA', 'NewColB')) | myt <- pārdēvēt (myt, NewColA = colA, NewColB = colB) |
Sleju pārkārtošana: Pārvietojiet dažas kolonnas uz priekšu (visvairāk pa kreisi) | Strīdēties | setcolorder (mydt, c ("colB", "colC")) # colB tagad 1. pozīcijā un colC 2. pozīcijā | myt <- pārvietot (myt, colB, colC) |
Filtrējiet rindas rindai n | Apakškopa | mydt2 <- mydt [n] | myt2 <- šķēle (myt, n) |
Filtrēt pēdējai rindai | Apakškopa | mydt2 <- mydt [.N] | myt2 <- šķēle (myt, n ()) |
Filtrējiet rindas pēc stāvokļa | Apakškopa | Dažos gadījumos iestatīšanas atslēga (mydt, colA, colB) paātrinās veiktspēju # loģiskiem testiem ar colA un colB; tas pats ar citām kolonnām mydt2 <- mydt [loģiskā izteiksme] | myt2 <- filtrs (myt, loģiskā izteiksme) |
Filtrējiet rindas, kur colA ir vienāda ar virkni1 vai virkni2 | Apakškopa | mydt2 <- mydt [colA% chin% c ("string1", "string2")] | myt2 <- filtrs (myt, colA%% c ("string1", "string2")) |
Filtrējiet rindas, kur colA atbilst regulārajai izteiksmei | Apakškopa | mydt2 <- mydt [colA%, piemēram,% "mypattern"] | myt2 <- filtrs (myt, stringr :: str_detect (colA, "mypattern")) |
Filtrējiet rindas, kur colA vērtības ir starp 2 skaitļiem | Apakškopa | mydt2 <- mydt [colA% starp% c (n1, n2)] | myt2 <- filtrs (myt, starp (colA, n1, n2)) |
Filtrējiet pirmās n rindas pēc grupas | Apakškopa | mydt2 <- mydt [, .SD [1: n], autors = groupcol] | myt2% group_by (groupcol)%>% šķēle (1: n) |
Filtrējiet rindas maksimālajai vērtībai pēc grupas | Apakškopa | mydt2 <- mydt [, .SD [kas.max (valcol)], autors = groupcol] | myt2% group_by (groupcol)%>% filtrs (valcol == max (valcol)) |
Atlasiet kolonnu un atgrieziet rezultātus kā vektoru | Apakškopa | myvec <- mydt [, kolname] | myvec <- pull (myt, kolname) |
Atlasiet vairākas kolonnas, lai izveidotu jaunus datus. Tabula (datu rāmis vai tibble tidyverse) | Apakškopa | mydt2 <- mydt [, saraksts (colA, colB)] # VAI mydt2 <- mydt [,. (colA, colB)] # VAI mydt2 <- mydt [, c ("colA", "colB")] | myt2 <- atlasiet (myt, colA, colB) |
Atlasiet vairākas kolonnas, izmantojot mainīgo, kas satur kolonnu nosaukumus | Apakškopa | my_col_names <- c ("colA", "colB") mydt2 <- mydt [, ..my_col_names] # VAI mydt2 <- mydt [, my_col_names, with = FALSE] | my_col_names <- c ("colA", "colB") myt2 <- atlasiet (myt, all_of (my_col_names)) |
Atlasiet vairākas kolonnas un pārdēvējiet dažas | Apakškopa | mydt2 <- mydt [,. (newname1 = col1, newname2 = col2, col3)] | myt2 <- atlasiet (myt, newname1 = col1, newname2 = col2, col3) |
Izslēdziet vairākas kolonnas | Apakškopa | mydt2 <- mydt [, -c ("colA", "colB")] # VAI mydt2 <- mydt [,! c ("colA", "colB")] # VAI my_col_names <- c ("colA", "colB") mydt2 <- mydt [,! .. my_col_names] | myt2 <- atlasiet (myt, -c (colA, colB)) # OR my_col_names <- c ("colA", "colB") myt2 <- atlasiet (myt, - {{my_col_names}}) |
Noņemiet rindu dublikātus, pamatojoties uz vērtībām vairākās kolonnās | Apakškopa | mydt2 <- unikāls (mydt, autors = c ("colA", "colB")) | myt2 <- atšķirīgs (myt, colA, colB, .keep_all = TRUE) |
Skaitiet unikālas rindas, pamatojoties uz vairākām kolonnām | Apkopojiet | unikālsN (mydt, autors = c ("colA", "colB")) | now (atšķirīgs (myt, colA, colB)) |
Veiciet datu kopsavilkuma aprēķinus | Apkopojiet | mydt2 <- mydt [, myfun (colA ...)] | myt2% apkopo (ColName = myfun (colA ...)) |
Veikt kopsavilkuma aprēķinus par vienas grupas datiem | Apkopojiet | mydt2 <- mydt [, myfun (colA ...), autors = groupcol] | myt2% group_by (groupcol)%>% apkopot ( NewCol = myfun (colA ...) ) |
Veiciet kopsavilkuma aprēķinus par datiem vienā grupā un nosauciet jaunu kolonnu | Apkopojiet | mydt2 <- mydt [,. (MyNewCol = myfun (colA ...)), autors = groupcol] | myt2% group_by (groupcol)%>% apkopot ( NewCol = myfun (colA ...) ) |
Veiciet kopsavilkuma aprēķinus vairākām grupām | Apkopojiet | mydt2 <- mydt [, myfun (colA ...), autors =. (groupcol1, groupcol2)] | myt2% group_by (groupcol1, groupcol2)%>% apkopot ( NewCol = myfun (colA ...) ) |
Veiciet filtrēto datu kopsavilkuma aprēķinu pa vairākām grupām | Apkopojiet | mydt2 <- mydt [filtrēt izteiksmi, myfun (colA), pēc =. (groupcol1, groupcol2)] | myt2% filtrs (filtra izteiksme)%>% group_by (groupcol1, groupcol2)%>% apkopot ( NewCol = myfun (colA), .groups = "saglabāt" ) |
Skaitīt rindu skaitu pa grupām | Apkopojiet | mydt2 <- mydt [,. N, by = groupcol] # vienai grupai # OR mydt2 <- mydt [, .N, pēc =. (groupcol1, groupcol2)] | myt2 <- skaits (myt, groupcol) # vienai grupai # OR myt2 <- skaits (myt, groupcol1, groupcol2) |
Apkopojiet vairākas kolonnas un atgrieziet rezultātus vairākās kolonnās | Apkopojiet | mydt2 <- mydt [, lapply (.SD, myfun), .SDcols = c ("colA", "colB")] | myt2% apkopot ( pāri (c (colA, colB), myfun) ) |
Apkopojiet vairākas kolonnas pa grupām un atgrieziet rezultātus vairākās kolonnās | Apkopojiet | mydt2 <- mydt [, lapply (.SD, myfun), .SDcols = c ("colA", "colB"), autors = groupcol] | myt2% group_by (groupcol)%>% apkopot (pāri (c (colA, colB), myfun)) |
Pievienojiet kolonnu | Aprēķiniet | mydt [, MyNewCol: = myfun (colA)] | Myt% mutēt ( MyNewCol = myfun (kolA) ) |
Pievienojiet vairākas kolonnas vienlaikus | Aprēķiniet | # izmantot jebkuru funkciju vai izteicienu mydt [, `: =" (NewCol1 = myfun (colA), NewCol2 = colB + colC)] # VAI mydt [, c ("NewCol1", "newCol2"): = saraksts (myfun (colA), colB + colC)] | Myt% mutēt ( MyNewCol1 = myfun (colA), MyNewCol2 = colB + colC ) |
Pievienojiet kolonnu, izmantojot pašreizējās un iepriekšējās vērtības no citas kolonnas, piemēram, atrodot atšķirību starp datuma vērtību un iepriekšējo datumu | Aprēķiniet | mydt [, Diff: = colA - nobīde (colA)] | myt <- mutācija (myt, Diff = colA - lag (colA)) |
Pievienojiet kolonnu, norādot grupas iepriekšējo kolonnas vērtību | Aprēķiniet | mydt2 <- mydt [, Diff: = colA - nobīde (colA), pēc = groupcol] | myt2% group_by (groupcol)%>% mutācijas (Diff = colA - lag (colA)) |
Pievienojiet kolonnu ar rindu ID numuriem pa grupām | Aprēķiniet | mydt [, myid: = 1:. N, autors = groupcol] | myt% group_by (groupcol)%>% mutācijas (myid = rindas_numurs ()) |
Pievienojiet kolonnu, pamatojoties uz vairākiem nosacījumiem, neizmantojot vairākus ja citādus priekšrakstus (piemēram, SQL CASE) | Aprēķiniet | # Nepieciešama data.table versija 1.13 vai jaunāka # Man patīk katrs nosacījums jaunā rindā, bet tas nav nepieciešams mydt2 <- mydt [, NewCol: = fcase ( nosacījums1, "Vērtība1", nosacījums2, "Vērtība2", nosacījums3, "Vērtība3", default = "Other" # vērtība visiem pārējiem )] | myt2% mutēt ( NewCol = case_when ( nosacījums1 ~ "Vērtība1", nosacījums2 ~ "Vērtība2", nosacījums3 ~ "Vērtība3", PATIESA ~ "Cits" ) ) |
Pievienojiet kolonnu, darbojoties pa rindām | Aprēķiniet | mydt [, newcol: = myfun (colB, colC, colD), pēc = 1: nrow (mydt)] # vai ja colA ir visas unikālās vērtības mydt [, newcol: = myfun (colB, colC, colD), autors = colA] | Myt% pēc kārtas ()%>% mutēt ( newcol = myfun (colB, colC, colD) ) # vai Myt% pēc kārtas ()%>% mutēt ( # use dplyr izvēlieties sintaksi: newcol = myfun (c_across (colB: colD)) ) |
Apvienojiet divas datu kopas ar vairāk nekā vienu kolonnu; saglabāt visu set1, bet tikai spēles set2 | Pievienojieties | mydt <- dt2 [dt1, on = c ("dt2col" = "dt1col")] # VAI mydt <- apvienot (dt1, dt2, by.x = "dt1col", by.y = "dt2col", all.x = TRUE) # VAI setkey (dt1, "dt1col") setkey (dt2, "dt2col") mydt <- dt2 [dt1] | myt <- left_join (df1, df2, = c ("df1col" = "df2col")) |
Apvienojiet 2 datu kopas ar vairāk nekā vienu kolonnu - saglabājiet visas kopas1, bet atbilstiet tikai kopai2 | Pievienojieties | mydt <- apvienot (dt1, dt2, by.x = c ("dt1colA", "dt1colB"), by.y = c ("dt2colA", "dt2colB"), all.x = TRUE, all.y = FALSE ) VAI iestatīšanas atslēga (dt1, dt1colA, dt1colB) setkey (dt2, dt2colA, dt2colB) mydt <- dt2 [dt1] | myt <- pa kreisi pievienoties (df1, df2, pēc = c ("df1colA" = "df2colA", "df1colB" = "df2colB")) |
Apvienojiet divas datu kopas ar vienu kopīgu kolonnu; tur tikai sērkociņus | Pievienojieties | mydt <- apvienot (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2") | myt <- internal_join (df1, df2, autors = c ("df1col" = "df2col")) |
Apvienojiet divas datu kopas vienā kopīgā kolonnā un glabājiet visus datus abās kopās neatkarīgi no tā, vai ir atbilstības | Pievienojieties | mydt <- apvienot (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2", visi = TRUE) | myt <- full_join (df1, df2, = c ("df1col" = "df2col")) |
Apvienojiet divas datu kopas, pievienojot rindas no vienas uz otru | Pievienojieties | mydt_joined <- rbindlist (saraksts (mydt, mydt2)) | myt_joined <- iesiešanas_rindas (myt, myt2) |
Pārveidojiet datus plaši vai ilgi | Pārveidojiet | mydt_long <- izkausēt (mydt, pasākums.vars = c ("col1", "col2", "col3"), mainīgais.nosaukums = "NewCategoryColName", vērtība.nosaukums = "NewValueColName") | myt_long <- pagrieziena_longer (myt, cols = sākas_ ar ("col"), names_to = "NewCategoryColName", vērtības_to = "NewValueColName") |
Pārveidojiet datus ilgi līdz plaši | Pārveidojiet | mydt_wide <- dcast (mydt, id_col1 ~ col1, value.var = "ValueColName") | myt_wide <- šarnīrsavienotājs (myt, nosaukumi_ no = col1, vērtības_ no = ValueColName) |
Ķēdē vairākas izteiksmes | Strīdēties | mydt [expr1] [expr2] | Myt% izteikt1%>% izteiksme2 |
Eksportējiet datus uz CSV failu | Eksportēt | fwrite (mydt, "myfile.csv") | write_csv (myt, "myfile.csv") |
Pievienojiet rindas esošam CSV failam | Eksportēt | fwrite (mydt2, "myfile.csv", append = TRUE) | vroom :: vroom_write (myt2, "myfile.csv", delim = ",", append = TRUE) |
Eksportējiet datus uz saspiestu CSV failu | Eksportēt | fwrite (mydt, "myfile.csv.gz", compress = "gzip") | vroom :: vroom_write (myt, "myfile2.csv.gz") |
Ir daudz vairāk, lai uzzinātu par data.table! Lai iegūtu dažus datus.tabula pamatus, skatiet manu piecu minūšu ievadvideo:
Visbeidzot, data.table vietnē ir daudz vairāk informācijas un padomu, piemēram, izmantošana iestatīts atslēga ()
un citi indeksēšanas padomi.