Programovanie

Konečná informačná tabuľka s údajmi R. Tabuľka

Rýchlosť. Stručná syntax. Spätná kompatibilita.

Ale hlavne rýchlosť.

To sú niektoré z funkcií, vďaka ktorým je R's data.table pre svojich fanúšikov pútavá.

A aj keď ste potvrdeným používateľom tidyverse (ako som ja), tabuľka data.table môže byť užitočným doplnkom k vašej súprave nástrojov R - najmä pri práci s veľkými množinami údajov, v aplikácii Shiny alebo vo funkcii balíka.

Táto podvádzaná tabuľka s údajmi R sa líši od mnohých iných, pretože je interaktívne. Môžete vyhľadať konkrétnu frázu ako pridať stĺpec alebo podľa typu pracovnej skupiny, ako napr Podmnožina alebo Preformovať. Pretože tento podvádzací list obsahuje upratovací „prekladový“ kód, môžete tiež vyhľadať obľúbené sloveso dplyr, ako napríklad mutovať alebo po rade.

Registrovaní užívatelia si môžu stiahnuť rozšírenú verziu tejto interaktívnej tabuľky na použitie vo svojich vlastných systémoch! Registrácia je bezplatná.

Vyhľadajte údaje a tabuľky a upratané úlohy a kód

ÚlohaTypkód tabuľky údajovTidyverse kód
Čítať v súbore CSVImportmydt <- fread ("myfile.csv")myt <- read_csv ("myfile.csv") #OR myt <- vroom :: vroom ("myfile.csv")
Importujte prvých x počet riadkov súboru CSVImportmydt_x <- fread ("myfile.csv", nrows = x)myt_x <- read_csv ("myfile.csv", n_max = x)
Importujte iba tie riadky zo súboru CSV, ktoré zodpovedajú určitému vzoruImportmydt_pattern <- fread ("grep 'mypattern' myfile.csv")myt_pattern <- vroom :: vroom (pipe ("grep 'mypattern' myfile.csv"))
Importujte komprimovaný súbor .gzImportmydt <- fread ("myfile.gz")myt <- vroom :: vroom ("myfile.gz")
Importujte komprimovaný súbor a.zipdovozmydt <- fread (cmd = 'unzip -cq myfile.zip')myt <- read_csv ("myfile.zip")
Vytvorte dátovú tabuľku z existujúceho dátového rámca (tibble for tidyverse)Importmydt <- as.data.table (mydf) #OR

setDT (mydf)

myt <- as_tibble (mydf)
Upraviť údaje. Tabuľka na mieste bez kopírovaniaHádkaakákoľvek funkcia, ktorá začína na set, ako je setkey (mydt, mycol) alebo pomocou operátora: = v zátvorkáchnepoužiteľné
Objednávajte riadky na základe viacerých hodnôt stĺpcovHádkamydt2 <- mydt [order (colA, -colB)] #OR

setorder (mydt, colA, -colB)

myt <- usporiadať (myt, colA, -colB)
Premenovať stĺpceHádkasetnames (mydt, old = c ('colA', 'colB'), new = c ('NewColA', 'NewColB'))myt <- premenovať (myt, NewColA = colA, NewColB = colB)
Zmena poradia stĺpcov: Posuňte niektoré stĺpce do polohy spredu (úplne zľava)Hádkasetcolorder (mydt, c ("colB", "colC")) # colB teraz na pozícii 1 a colC na pozícii 2myt <- premiestniť (myt, colB, colC)
Filtrovať riadky pre číslo riadku nPodmnožinamydt2 <- mydt [n]myt2 <- plátok (myt, n)
Filter pre posledný riadokPodmnožinamydt2 <- mydt [.N]myt2 <- slice (myt, n ())
Filtrovať riadky podľa podmienkyPodmnožina# V niektorých prípadoch setkey (mydt, colA, colB) urýchli výkon # pre logické testy na colA a colB; to isté s ostatnými stĺpcami

mydt2 <- mydt [logický výraz]

myt2 <- filter (myt, logický výraz)
Filtrovať riadky, kde stĺpec colA sa rovná reťazcu1 alebo reťazcu2Podmnožinamydt2 <- mydt [colA% chin% c ("string1", "string2")]myt2 <- filter (myt, colA% in% c ("string1", "string2"))
Filtrujte riadky, kde sa colA zhoduje s regulárnym výrazomPodmnožinamydt2 <- mydt [colA% like% "mypattern"]myt2 <- filter (myt, stringr :: str_detect (colA, "mypattern"))
Filtrujte riadky, kde sú hodnoty colA medzi 2 číslamiPodmnožinamydt2 <- mydt [colA% medzi% c (n1, n2)]myt2 <- filter (myt, between (colA, n1, n2))
Filtrovanie prvých n riadkov podľa skupinyPodmnožinamydt2 <- mydt [, .SD [1: n], autor = groupcol]myt2% group_by (groupcol)%>% slice (1: n)
Filtrovať riadky podľa maximálnej hodnoty podľa skupinyPodmnožinamydt2 <- mydt [, .SD [which.max (valcol)], podľa = groupcol]myt2% group_by (groupcol)%>% filter (valcol == max (valcol))
Vyberte stĺpec a výsledky vráťte ako vektorPodmnožinamyvec <- mydt [, colname]myvec <- pull (myt, colname)
Vyberte viac stĺpcov a vytvorte nový údajový údaj. Tabuľka (údajový rámec alebo tabuľka pre tidyverse)Podmnožinamydt2 <- mydt [, zoznam (colA, colB)] #OR

mydt2 <- mydt [,. (colA, colB)] #OR

mydt2 <- mydt [, c ("colA", "colB")]

myt2 <- vyberte (myt, colA, colB)
Vyberte viac stĺpcov pomocou premennej obsahujúcej názvy stĺpcovPodmnožinamy_col_names <- c ("colA", "colB")

mydt2 <- mydt [, ..my_col_names] #OR

mydt2 <- mydt [, my_col_names, s = FALSE]

my_col_names <- c ("colA", "colB")

myt2 <- vyberte (myt, all_of (my_col_names))

Vyberte viac stĺpcov a niektoré premenujtePodmnožinamydt2 <- mydt [,. (newname1 = col1, newname2 = col2, col3)]myt2 <- vyberte (myt, newname1 = col1, newname2 = col2, col3)
Vylúčte viac stĺpcovPodmnož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}})

Odstráňte duplicitné riadky na základe hodnôt vo viacerých stĺpcochPodmnožinamydt2 <- jedinečný (mydt, by = c ("colA", "colB"))myt2 <- odlišné (myt, colA, colB, .keep_all = TRUE)
Spočítajte jedinečné riadky založené na viacerých stĺpcochZhrňteuniqueN (mydt, by = c ("colA", "colB"))nrow (zreteľný (myt, colA, colB))
Spustite súhrnné výpočty údajovZhrňtemydt2 <- mydt [, myfun (colA ...)]myt2% summarize (ColName = myfun (colA ...))
Spustite súhrnné výpočty údajov podľa jednej skupinyZhrňtemydt2 <- mydt [, myfun (colA ...), by = groupcol] myt2%

group_by (groupcol)%>%

zhrnúť (

NewCol = myfun (colA ...)

)

Spustite súhrnné výpočty údajov podľa jednej skupiny a pomenujte nový stĺpecZhrňtemydt2 <- mydt [,. (MyNewCol = myfun (colA ...)), by = groupcol]myt2%

group_by (groupcol)%>%

zhrnúť (

NewCol = myfun (colA ...)

)

Spustite súhrnné výpočty údajov podľa viacerých skupínZhrňtemydt2 <- mydt [, myfun (colA ...), podľa =. (groupcol1, groupcol2)]myt2%

group_by (groupcol1, groupcol2)%>%

zhrnúť (

NewCol = myfun (colA ...)

)

Spustite súhrnný výpočet filtrovaných údajov podľa viacerých skupínZhrňtemydt2 <- mydt [filtrovať výraz, myfun (colA), podľa =. (groupcol1, groupcol2)]myt2%

filter (výraz filtra)%>%

group_by (groupcol1, groupcol2)%>%

zhrnúť (

NewCol = myfun (colA), .groups = "keep"

)

Spočítajte počet riadkov podľa skupínZhrňtemydt2 <- mydt [,. N, podľa = groupcol] # pre jednu skupinu #OR

mydt2 <- mydt [, .N, podľa =. (groupcol1, groupcol2)]

myt2 <- count (myt, groupcol) # pre jednu skupinu #OR

myt2 <- počet (myt, groupcol1, groupcol2)

Zhrňte viac stĺpcov a vráťte výsledky do viacerých stĺpcovZhrňtemydt2 <- mydt [, lapply (.SD, myfun),

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

myt2%

zhrnúť (

naprieč (c (colA, colB), myfun)

)

Zhrňte viac stĺpcov podľa skupín a vráťte výsledky do viacerých stĺpcovZhrňtemydt2 <- mydt [, lapply (.SD, myfun),

.SDcols = c ("colA", "colB"), podľa = groupcol]

myt2%

group_by (groupcol)%>%

sumarizovať (naprieč (c (colA, colB), myfun))

Pridajte stĺpecVypočítaťmydt [, MyNewCol: = myfun (colA)] myt%

mutovať(

MyNewCol = myfun (colA)

)

Pridajte viac stĺpcov narazVypočítať# použite ľubovoľnú funkciu alebo výraz

mydt [, `: =` (NewCol1 = myfun (colA), NewCol2 = colB + colC)] #OR

mydt [, c ("NewCol1", "newCol2"): = list (myfun (colA), colB + colC)]

myt%

mutovať(

MyNewCol1 = myfun (colA),

MyNewCol2 = colB + colC

)

Pridajte stĺpec s použitím aktuálnych a predchádzajúcich hodnôt z iného stĺpca, napríklad vyhľadajte rozdiel medzi hodnotou v dátume a predchádzajúcim dátumomVypočítaťmydt [, Diff: = colA - shift (colA)]myt <- mutovať (myt, Diff = colA - lag (colA))
Pridajte stĺpec odkazujúci na predchádzajúcu hodnotu stĺpca podľa skupinyVypočítaťmydt2 <- mydt [, Diff: = colA - shift (colA), by = groupcol]myt2% group_by (groupcol)%>% mutovať (Diff = colA - oneskorenie (colA))
Pridajte stĺpec s identifikačnými číslami riadkov podľa skupinyVypočítaťmydt [, myid: = 1: .N, od = groupcol]myt% group_by (groupcol)%>% mutate (myid = row_number ())
Pridajte stĺpec na základe niekoľkých podmienok bez použitia viacerých príkazov if else (napríklad CASE jazyka SQL)Vypočítať# Vyžaduje dátovú tabuľku verzie 1.13 alebo novšej

# Mám rád každú podmienku na novom riadku, ale nie je to potrebné

mydt2 <- mydt [, NewCol: = fcase (

podmienka1, "Hodnota1",

podmienka2, "Hodnota2",

podmienka3, "Hodnota3",

default = "Other" # hodnota pre všetky ostatné

)]

myt2%

mutovať(

NewCol = case_when (

podmienka1 ~ "Hodnota1",

podmienka2 ~ "Hodnota2",

podmienka3 ~ "Hodnota3",

TRUE ~ „Iné“

)

)

Pridajte stĺpec pomocou operácie po riadkuVypočítaťmydt [, newcol: = myfun (colB, colC, colD), o = 1: nrow (mydt)]

# alebo ak má colA všetky jedinečné hodnoty

mydt [, newcol: = myfun (colB, colC, colD), by = colA]

myt%

po riadkoch ()%>%

mutovať(

newcol = myfun (colB, colC, colD)

)

# alebo

myt%

po riadkoch ()%>%

mutovať(

#use dplyr vyberte syntax:

newcol = myfun (c_across (colB: colD))

)

Spojte dve množiny údajov o viac ako jeden stĺpec; ponechať všetko v set1, ale iba zápasy v set2Pripojte samydt <- dt2 [dt1, on = c ("dt2col" = "dt1col")] #OR

mydt <- zlúčiť (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 množiny údajov o viac ako jeden stĺpec - ponechajte všetky v množine 1, ale iba zhody v množine 2Pripojte samydt <- zlúčiť (dt1, dt2, by.x = c ("dt1colA", "dt1colB"), by.y = c ("dt2colA", "dt2colB"), all.x = PRAVDA, all.y = FALSE ) #OR

setkey (dt1, dt1colA, dt1colB)

setkey (dt2, dt2colA, dt2colB)

mydt <- dt2 [dt1]

myt <- left_join (df1, df2, by = c ("df1colA" = "df2colA", "df1colB" = "df2colB"))
Spojte dve množiny údajov o jeden spoločný stĺpec; držte iba zápasyPripojte samydt <- zlúčiť (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2")myt <- inner_join (df1, df2, by = c ("df1col" = "df2col"))
Spojte dve množiny údajov do jedného spoločného stĺpca a ponechajte všetky údaje v oboch množinách, bez ohľadu na to, či existujú alebo nie sú zhodyPripojte samydt <- zlúčiť (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2", všetko = PRAVDA)myt <- full_join (df1, df2, by = c ("df1col" = "df2col"))
Kombinujte dve množiny údajov pridaním riadkov od jedného k dolnému okraju druhéhoPripojte samydt_joined <- rbindlist (zoznam (mydt, mydt2))myt_joined <- bind_rows (myt, myt2)
Zmena tvaru údajov na širokú až dlhúPreformovať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")
Zmena tvaru údajov na dlhú šírkuPreformovaťmydt_wide <- dcast (mydt, id_col1 ~ col1, value.var = "ValueColName")myt_wide <- pivot_wider (myt, names_from = col1, values_from = ValueColName)
Reťazte viac výrazovHádkamydt [expr1] [expr2]myt%

expr1%>%

expr2

Exportujte údaje do súboru CSVExportfwrite (mydt, "myfile.csv")write_csv (myt, "myfile.csv")
Pripojiť riadky k existujúcemu súboru CSVExportfwrite (mydt2, "myfile.csv", append = TRUE)vroom :: vroom_write (myt2, "myfile.csv", delim = ",", append = TRUE)
Exportujte údaje do komprimovaného súboru CSVExportfwrite (mydt, "myfile.csv.gz", compress = "gzip")vroom :: vroom_write (myt, "myfile2.csv.gz")

O data.table sa dá naučiť oveľa viac! Niektoré základy tabuľky data.table si pozrite v mojom päťminútovom úvodnom videu:

Webová stránka data.table obsahuje mnoho ďalších informácií a tipov, ako je napríklad používanie setkey () a ďalšie tipy na indexovanie.

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