Programmēšana

Galīgā R data.table apkrāptu lapa

Ā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

UzdevumsTipsdati.tabulas kodsTidiversas kods
Lasīt CSV failāImportētmydt <- fread ("myfile.csv")myt <- read_csv ("myfile.csv") # OR myt <- vroom :: vroom ("myfile.csv")
Importējiet pirmās x CSV faila rindu skaituImportētmydt_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 paraugamImportētmydt_pattern <- fread ("grep 'mypattern' myfile.csv")myt_pattern <- vroom :: vroom (pipe ("grep 'mypattern' myfile.csv"))
Importējiet saspiestu .gz failuImportētmydt <- fread ("myfile.gz")myt <- vroom :: vroom ("myfile.gz")
Importējiet saspiestu a.zip failuimportētmydt <- fread (cmd = 'unzip -cq myfile.zip')myt <- lasīt_csv ("myfile.zip")
Izveidot datu tabulu no esošā datu rāmja (tibble for tidyverse)Importētmydt <- as.data.table (mydf) # VAI

setDT (mydf)

myt <- as_tibble (mydf)
Mainīt datus. Tabula vietā, neveidojot kopijuStrīdētiesjebkura funkcija, kas sākas ar kopu, piemēram, setkey (mydt, mycol) vai iekavās tiek izmantots: = operatorsnav piemērojams
Kārtot rindas, pamatojoties uz vairākām kolonnu vērtībāmStrīdētiesmydt2 <- mydt [secība (colA, -colB)] # VAI

setorder (mydt, colA, -colB)

myt <- sakārtot (myt, colA, -colB)
Pārdēvēt kolonnasStrīdētiessetnames (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ētiessetcolorder (mydt, c ("colB", "colC")) # colB tagad 1. pozīcijā un colC 2. pozīcijāmyt <- pārvietot (myt, colB, colC)
Filtrējiet rindas rindai nApakškopamydt2 <- mydt [n]myt2 <- šķēle (myt, n)
Filtrēt pēdējai rindaiApakškopamydt2 <- mydt [.N]myt2 <- šķēle (myt, n ())
Filtrējiet rindas pēc stāvokļaApakškopaDaž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 virkni2Apakškopamydt2 <- mydt [colA% chin% c ("string1", "string2")]myt2 <- filtrs (myt, colA%% c ("string1", "string2"))
Filtrējiet rindas, kur colA atbilst regulārajai izteiksmeiApakškopamydt2 <- 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ļiemApakškopamydt2 <- mydt [colA% starp% c (n1, n2)]myt2 <- filtrs (myt, starp (colA, n1, n2))
Filtrējiet pirmās n rindas pēc grupasApakškopamydt2 <- mydt [, .SD [1: n], autors = groupcol]myt2% group_by (groupcol)%>% šķēle (1: n)
Filtrējiet rindas maksimālajai vērtībai pēc grupasApakškopamydt2 <- mydt [, .SD [kas.max (valcol)], autors = groupcol]myt2% group_by (groupcol)%>% filtrs (valcol == max (valcol))
Atlasiet kolonnu un atgrieziet rezultātus kā vektoruApakškopamyvec <- mydt [, kolname]myvec <- pull (myt, kolname)
Atlasiet vairākas kolonnas, lai izveidotu jaunus datus. Tabula (datu rāmis vai tibble tidyverse)Apakškopamydt2 <- 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 nosaukumusApakškopamy_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žasApakškopamydt2 <- mydt [,. (newname1 = col1, newname2 = col2, col3)]myt2 <- atlasiet (myt, newname1 = col1, newname2 = col2, col3)
Izslēdziet vairākas kolonnasApakškopamydt2 <- 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āsApakškopamydt2 <- 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āmApkopojietunikālsN (mydt, autors = c ("colA", "colB"))now (atšķirīgs (myt, colA, colB))
Veiciet datu kopsavilkuma aprēķinusApkopojietmydt2 <- mydt [, myfun (colA ...)]myt2% apkopo (ColName = myfun (colA ...))
Veikt kopsavilkuma aprēķinus par vienas grupas datiemApkopojietmydt2 <- mydt [, myfun (colA ...), autors = groupcol] myt2%

group_by (groupcol)%>%

apkopot (

NewCol = myfun (colA ...)

)

Veiciet kopsavilkuma aprēķinus par datiem vienā grupā un nosauciet jaunu kolonnuApkopojietmydt2 <- mydt [,. (MyNewCol = myfun (colA ...)), autors = groupcol]myt2%

group_by (groupcol)%>%

apkopot (

NewCol = myfun (colA ...)

)

Veiciet kopsavilkuma aprēķinus vairākām grupāmApkopojietmydt2 <- 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āmApkopojietmydt2 <- 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āmApkopojietmydt2 <- 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āsApkopojietmydt2 <- 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āsApkopojietmydt2 <- mydt [, lapply (.SD, myfun),

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

myt2%

group_by (groupcol)%>%

apkopot (pāri (c (colA, colB), myfun))

Pievienojiet kolonnuAprēķinietmydt [, MyNewCol: = myfun (colA)] Myt%

mutēt (

MyNewCol = myfun (kolA)

)

Pievienojiet vairākas kolonnas vienlaikusAprēķ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 datumuAprēķinietmydt [, Diff: = colA - nobīde (colA)]myt <- mutācija (myt, Diff = colA - lag (colA))
Pievienojiet kolonnu, norādot grupas iepriekšējo kolonnas vērtībuAprēķinietmydt2 <- 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āmAprēķinietmydt [, 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āmAprēķinietmydt [, 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 set2Pievienojietiesmydt <- 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 kopai2Pievienojietiesmydt <- 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ņusPievienojietiesmydt <- 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ībasPievienojietiesmydt <- 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 otruPievienojietiesmydt_joined <- rbindlist (saraksts (mydt, mydt2))myt_joined <- iesiešanas_rindas (myt, myt2)
Pārveidojiet datus plaši vai ilgiPārveidojietmydt_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šiPārveidojietmydt_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 izteiksmesStrīdētiesmydt [expr1] [expr2]Myt%

izteikt1%>%

izteiksme2

Eksportējiet datus uz CSV failuEksportētfwrite (mydt, "myfile.csv")write_csv (myt, "myfile.csv")
Pievienojiet rindas esošam CSV failamEksportētfwrite (mydt2, "myfile.csv", append = TRUE)vroom :: vroom_write (myt2, "myfile.csv", delim = ",", append = TRUE)
Eksportējiet datus uz saspiestu CSV failuEksportētfwrite (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.

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