Programavimas

Galutinis „R data.table“ cheat sheet

Greitis. Glausta sintaksė. Suderinamumas atgal.

Bet ypač greitis.

Tai yra keletas funkcijų, dėl kurių R duomenys. Lentelė patraukia savo gerbėjus.

Net jei esate patvirtintas tvarkingas vartotojas (kaip ir aš), „data.table“ gali būti naudingas jūsų „R“ rinkinio priedas, ypač dirbant su dideliais duomenų rinkiniais, „Shiny“ programoje ar paketo funkcijoje.

Šis „R data.table“ pagrindinis apgaulės lapas skiriasi nuo daugelio kitų, nes jis yra interaktyvus. Galite ieškoti konkrečios frazės, pvz pridėti stulpelį arba pagal užduočių grupės tipą, pvz Pogrupis arba Pertvarkykite. Be to, kadangi šiame apgaulės lape yra „tidyverse“ vertimo kodas, taip pat galite ieškoti mėgstamiausio veiksmažodžio, pvz., mutuoti arba iš eilės.

Registruoti vartotojai gali atsisiųsti išplėstinę šios interaktyvios lentelės versiją, skirtą naudoti savo sistemose! Registracija nemokama.

Ieškokite duomenų. Lentelės ir tvarkingos užduotys bei kodas

UžduotisTipasduomenys. lentelės kodasTidiverso kodas
Skaityti CSV faileImportuotimydt <- fread ("myfile.csv")myt <- read_csv ("myfile.csv") #OR myt <- vroom :: vroom ("myfile.csv")
Importuokite pirmąjį x CSV failo eilučių skaičiųImportuotimydt_x <- fread ("myfile.csv", nrows = x)myt_x <- skaityti_csv ("myfile.csv", n_max = x)
Importuokite tik tas eilutes iš CSV failo, kurios atitinka tam tikrą modelįImportuotimydt_pattern <- fread ("grep 'mypattern' myfile.csv")myt_pattern <- vroom :: vroom (pipe ("grep 'mypattern' myfile.csv"))
Importuokite suspaustą .gz failąImportuotimydt <- fread ("myfile.gz")myt <- vroom :: vroom ("myfile.gz")
Importuokite suspaustą a.zip failąimportasmydt <- pluoštas (cmd = 'išpakuoti -cq myfile.zip')myt <- skaitykite_csv ("myfile.zip")
Sukurti duomenų lentelę iš esamo duomenų rėmelio („tidyverse“ tibble)Importuotimydt <- as.data.table (mydf) # ARBA

setDT (mydf)

myt <- as_tibble (mydf)
Pakeiskite duomenis. Lentelė vietoje nedarant kopijosRaizgytisbet kuri funkcija, prasidedanti aibe, pvz., setkey (mydt, mycol) arba skliausteliuose naudojama operacija: =netaikoma
Rikiuoti eilutes pagal kelias stulpelių vertesRaizgytismydt2 <- mydt [tvarka (colA, -colB)] # ARBA

setorder (mydt, colA, -colB)

myt <- sutvarkyti (myt, colA, -colB)
Pervardyti stulpeliusRaizgytissetnames (mydt, old = c ('colA', 'colB'), new = c ('NewColA', 'NewColB'))myt <- pervardyti (myt, NewColA = colA, NewColB = colB)
Stulpelių pertvarkymas: perkelkite kai kuriuos stulpelius į priekinę (labiausiai kairę) padėtįRaizgytissetcolorder (mydt, c ("colB", "colC")) # colB dabar 1 pozicijoje ir colC 2 pozicijojemyt <- persikelti (myt, colB, colC)
Filtruokite eilučių numerio n eilutesPogrupismydt2 <- mydt [n]myt2 <- griežinėlis (myt, n)
Filtruokite paskutinę eilutęPogrupismydt2 <- mydt [.N]myt2 <- griežinėlis (myt, n ())
Filtruokite eilutes pagal sąlygąPogrupis# Kai kuriais atvejais raktinis raktas (mydt, colA, colB) paspartins loginių kolA ir colB testų našumą. tas pats ir su kitais stulpeliais

mydt2 <- mydt [loginė išraiška]

myt2 <- filtras (myt, loginė išraiška)
Filtruokite eilutes, kur colA lygi eilutei1 arba eilutei2Pogrupismydt2 <- mydt [colA% chin% c ("string1", "string2")]myt2 <- filtras (myt, colA%% c ("string1", "string2"))
Filtruokite eilutes, kuriose colA atitinka įprastą išraiškąPogrupismydt2 <- mydt [colA% patinka% "mypattern"]myt2 <- filtras (myt, stringr :: str_detect (colA, "mypattern"))
Filtruokite eilutes, kur colA reikšmės yra tarp 2 skaičiųPogrupismydt2 <- mydt [colA% tarp% c (n1, n2)]myt2 <- filtras (myt, tarp (colA, n1, n2))
Filtruokite pirmąsias n eilutes pagal grupęPogrupismydt2 <- mydt [, .SD [1: n], pagal = groupcol]myt2% group_by (groupcol)%>% griežinėlis (1: n)
Filtruokite didžiausios vertės eilutes pagal grupesPogrupismydt2 <- mydt [, .SD [kuri.max (valcol)], pagal = groupcol]myt2% group_by (groupcol)%>% filtras (valcol == max (valcol))
Pasirinkite stulpelį ir grąžinkite rezultatus kaip vektoriųPogrupismyvec <- mydt [, kolname]myvec <- traukti (myt, kolname)
Pasirinkite kelis stulpelius, kad sukurtumėte naujus duomenis. Lentelė (duomenų rėmelis arba „tidyverse“ lentelė)Pogrupismydt2 <- mydt [, sąrašas (colA, colB)] # ARBA

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

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

myt2 <- pasirinkite (myt, colA, colB)
Pasirinkite kelis stulpelius naudodami kintamąjį, kuriame yra stulpelių pavadinimaiPogrupismy_col_names <- c ("colA", "colB")

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

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

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

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

Pasirinkite kelis stulpelius ir pervardykite kai kuriuosPogrupismydt2 <- mydt [,. (naujasvardas1 = col1, naujasis vardas2 = kol2, kol3)]myt2 <- pasirinkite (myt, newname1 = col1, newname2 = col2, col3)
Išskirkite kelis stulpeliusPogrupismydt2 <- mydt [, -c ("colA", "colB")] # ARBA

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

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

mydt2 <- mydt [,! .. my_col_names]

myt2 <- pasirinkite (myt, -c (colA, colB)) # ARBA

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

myt2 <- pasirinkite (myt, - {{my_col_names}})

Pašalinkite pasikartojančias eilutes pagal kelių stulpelių reikšmesPogrupismydt2 <- unikalus (mydt, = c ("colA", "colB"))myt2 <- skiriasi (myt, colA, colB, .keep_all = TIESA)
Skaičiuokite unikalias eilutes pagal kelis stulpeliusApibendrinkiteunikalusN (mydt, = c ("colA", "colB"))dabar (skiriasi (myt, colA, colB))
Atlikite suvestinius duomenų skaičiavimusApibendrinkitemydt2 <- mydt [, myfun (colA ...)]myt2% apibendrinti (ColName = myfun (colA ...))
Atlikite vienos grupės duomenų suvestinių skaičiavimusApibendrinkitemydt2 <- mydt [, myfun (colA ...), pagal = groupcol] myt2%

group_by (groupcol)%>%

apibendrinti (

NewCol = myfun (colA ...)

)

Atlikite vienos grupės duomenų suvestinių skaičiavimus ir pavadinkite naują stulpelįApibendrinkitemydt2 <- mydt [,. („MyNewCol = myfun“ (colA ...)), pateikė = groupcol]myt2%

group_by (groupcol)%>%

apibendrinti (

NewCol = myfun (colA ...)

)

Atlikite kelių grupių duomenų suvestinių skaičiavimusApibendrinkitemydt2 <- mydt [, myfun (colA ...), pagal =. (groupcol1, groupcol2)]myt2%

group_by (groupcol1, groupcol2)%>%

apibendrinti (

NewCol = myfun (colA ...)

)

Atlikite filtruotų duomenų suvestinę pagal kelias grupesApibendrinkitemydt2 <- mydt [filtro išraiška, myfun (colA), pagal =. (groupcol1, groupcol2)]myt2%

filtras (filtro išraiška)%>%

group_by (groupcol1, groupcol2)%>%

apibendrinti (

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

)

Skaičiuokite eilučių skaičių pagal grupesApibendrinkitemydt2 <- mydt [,. N, pagal = groupcol] #vienai grupei # ARBA

mydt2 <- mydt [, .N, pagal =. (groupcol1, groupcol2)]

myt2 <- skaičius (myt, groupcol) #vienai grupei #OR

myt2 <- skaičius (myt, groupcol1, groupcol2)

Apibendrinkite kelis stulpelius ir grąžinkite rezultatus į kelis stulpeliusApibendrinkitemydt2 <- mydt [, lapply (.SD, myfun),

.SDcols = c („colA“, „colB“)]

myt2%

apibendrinti (

skersai (c (colA, colB), myfun)

)

Apibendrinkite kelis stulpelius pagal grupes ir grąžinkite rezultatus į kelis stulpeliusApibendrinkitemydt2 <- mydt [, lapply (.SD, myfun),

.SDcols = c („colA“, „colB“), pagal = groupcol]

myt2%

group_by (groupcol)%>%

apibendrinti (skersai (c (colA, colB), myfun))

Pridėti stulpelįApskaičiuotimydt [, MyNewCol: = myfun (colA)] mit%

mutuoti(

MyNewCol = myfun (colA)

)

Pridėkite kelis stulpelius vienu metuApskaičiuoti# naudoti bet kokią funkciją ar išraišką

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

mydt [, c ("NewCol1", "newCol2"): = sąrašas (myfun (colA), colB + colC)]

mit%

mutuoti(

MyNewCol1 = myfun (colA),

MyNewCol2 = colB + colC

)

Pridėkite stulpelį naudodami dabartines ir ankstesnes kito stulpelio vertes, pvz., Nustatykite skirtumą tarp datos vertės ir ankstesnės datosApskaičiuotimydt [, dif .: = colA - shift (colA)]myt <- mutuoti (myt, Diff = colA - lag (colA))
Pridėkite stulpelį, nurodydami ankstesnę grupės stulpelio vertęApskaičiuotimydt2 <- mydt [, dif: = colA - shift (colA), pagal = groupcol]myt2% group_by (groupcol)%>% mutuoja (Diff = colA - lag (colA))
Pridėkite stulpelį su eilutės ID numeriais pagal grupesApskaičiuotimydt [, myid: = 1:. N, pagal = groupcol]myt% group_by (groupcol)%>% mutate (myid = row_number ())
Pridėkite stulpelį pagal kelias sąlygas nenaudodami kelių if else sakinių (pvz., SQL CASE)Apskaičiuoti# Reikia 1,13 ar naujesnės versijos „data.table“ versijos

# Man patinka kiekviena sąlyga naujoje eilutėje, bet to nereikia

mydt2 <- mydt [, NewCol: = fcase (

condition1, "Value1",

condition2, "Value2",

3 sąlyga, „3 vertė“,

default = "Other" # viso kito vertė

)]

myt2%

mutuoti(

NewCol = case_when (

condition1 ~ "Value1",

condition2 ~ "Value2",

condition3 ~ "Value3",

TIESA ~ „Kita“

)

)

Pridėkite stulpelį veikdami pagal eilutęApskaičiuotimydt [, newcol: = myfun (colB, colC, colD), pagal = 1: nrow (mydt)]

# arba jei „colA“ turi visas unikalias reikšmes

mydt [, newcol: = manofun (colB, colC, colD), pagal = colA]

mit%

iš eilės ()%>%

mutuoti(

newcol = myfun (colB, colC, colD)

)

# arba

mit%

iš eilės ()%>%

mutuoti(

# use dplyr pasirinkite sintaksę:

newcol = myfun (c_across (colB: colD))

)

Sujunkite du duomenų rinkinius iš daugiau nei vieno stulpelio; laikyti visus set1, bet tik set2 rinkiniusPrisijunkitemydt <- dt2 [dt1, on = c ("dt2col" = "dt1col")] # ARBA

mydt <- sujungti (dt1, dt2, by.x = "dt1col", by.y = "dt2col", visi.x = TIESA) # ARBA

setkey (dt1, "dt1col") setkey (dt2, "dt2col") mydt <- dt2 [dt1]

myt <- left_join (df1, df2, = c ("df1col" = "df2col"))
Sujunkite 2 duomenų rinkinius daugiau nei su vienu stulpeliu - visus laikykite 1 rinkinyje, bet tik 2 rinkinyjePrisijunkitemydt <- sujungti (dt1, dt2, by.x = c ("dt1colA", "dt1colB"), by.y = c ("dt2colA", "dt2colB"), visi.x = TIESA, visi.y = NETIESA ) ARBA

nustatomasis raktas (dt1, dt1colA, dt1colB)

nustatomasis raktas (dt2, dt2colA, dt2colB)

mydt <- dt2 [dt1]

myt <- left_join (df1, df2, = c ("df1colA" = "df2colA", "df1colB" = "df2colB"))
Sujunkite du duomenų rinkinius vienu stulpeliu; laikyti tik degtukusPrisijunkitemydt <- sujungti (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2")myt <- vidinis_ prisijungti (df1, df2, = c ("df1col" = "df2col"))
Sujunkite du duomenų rinkinius pagal vieną bendrą stulpelį ir saugokite visus duomenis abiejuose rinkiniuose, neatsižvelgiant į tai, ar yra atitikčiųPrisijunkitemydt <- sujungti (dt1, dt2, by.x = "dtcol1", by.y = "dtcol2", visi = TIESA)myt <- full_join (df1, df2, = c ("df1col" = "df2col"))
Sujunkite du duomenų rinkinius pridėdami eilutes iš vienos į kitos apačiąPrisijunkitemydt_joined <- rbindlist (sąrašas (mydt, mydt2))myt_joined <- bind_rows (myt, myt2)
Duomenis pertvarkykite plačiai ar ilgaiPertvarkykitemydt_long <- lydyti (mydt, measure.vars = c ("col1", "col2", "col3"), kintamasis_vardas = "NewCategoryColName", reikšmė.vardas = "NewValueColName")myt_long <- sukamasis_longer (myt, cols = prasideda_su ("col"), names_to = "NewCategoryColName", reikšmes_to = "NewValueColName")
Duomenis pertvarkykite ilgaiPertvarkykitemydt_wide <- dcast (mydt, id_col1 ~ col1, value.var = "ValueColName")„myt_wide“ - „pivot_wider“ („myt, names_from = col1“, „value_from“ = „ValueColName“)
Grandinės kelias išraiškasRaizgytismydt [expr1] [expr2]mit%

1%>%

išraiška2

Eksportuoti duomenis į CSV failąEksportuotifwrite (mydt, „myfile.csv“)write_csv (myt, "myfile.csv")
Pridėti eilučių prie esamo CSV failoEksportuotifwrite (mydt2, "myfile.csv", pridėti = TRUE)vroom :: vroom_write („myt2“, „myfile.csv“, delim = ",", add = TRUE)
Eksportuoti duomenis į suglaudintą CSV failąEksportuotifwrite (mydt, "myfile.csv.gz", compress = "gzip")vroom :: vroom_write (myt, "myfile2.csv.gz")

Yra daug daugiau sužinoti apie „data.table“! Norėdami sužinoti kai kuriuos „data.table“ pagrindus, peržiūrėkite mano penkių minučių įvadinį vaizdo įrašą:

Galiausiai „data.table“ svetainėje yra daug daugiau informacijos ir patarimų, pavyzdžiui, naudojant raktas () ir kiti indeksavimo patarimai.