Sök…


Introduktion

Den speciella symbolen .SD finns i j av DT[i,j,by] , fånga S ubset av D ata för varje by grupp överlevande filtret, i . .SDcols är en hjälpare. Skriv in ?`special-symbols` för de officiella dokumenten.

Anmärkningar

En påminnelse: DT[where, select|update|do, by] syntax används för att arbeta med kolumner i en datatabell.

  • "Var" -delen är i argumentet
  • Delen "select | update | do" är j argumentet

Dessa två argument skickas vanligtvis efter position istället för med namn.

Använda .SD och .SDcols

.SD

.SD hänvisar till delmängden av data.table för varje grupp, exklusive alla kolumner som används by .

.SD tillsammans med lapply kan användas för att tillämpa valfri funktion på flera kolumner per grupp i en data.table

Vi kommer att fortsätta använda samma inbyggda dataset, mtcars :

mtcars = data.table(mtcars) # Let's not include rownames to keep things simpler

Medel av alla kolumner i datasatsen efter antal cylindrar , cyl :

mtcars[ , lapply(.SD, mean), by = cyl]

#   cyl      mpg     disp        hp     drat       wt     qsec        vs        am     gear     carb
#1:   6 19.74286 183.3143 122.28571 3.585714 3.117143 17.97714 0.5714286 0.4285714 3.857143 3.428571
#2:   4 26.66364 105.1364  82.63636 4.070909 2.285727 19.13727 0.9090909 0.7272727 4.090909 1.545455
#3:   8 15.10000 353.1000 209.21429 3.229286 3.999214 16.77214 0.0000000 0.1428571 3.285714 3.500000

Förutom cyl finns det andra kategoriska kolumner i datasättet som vs , am , gear och carb . Det är inte vettigt att ta med sig mean från dessa kolumner. Så låt oss utesluta dessa kolumner. Det är här .SDcols kommer in i bilden.

.SDcols

.SDcols anger kolumnerna i data.table som ingår i .SD .

Medelvärde för alla kolumner (kontinuerliga kolumner) i datauppsättningen genom antalet växlar gear , och antalet cylindrar, cyl , arrangerad av gear och cyl :

# All the continuous variables in the dataset
cols_chosen <- c("mpg", "disp", "hp", "drat", "wt", "qsec")

mtcars[order(gear, cyl), lapply(.SD, mean), by = .(gear, cyl), .SDcols = cols_chosen]

#   gear cyl    mpg     disp       hp     drat       wt    qsec
#1:    3   4 21.500 120.1000  97.0000 3.700000 2.465000 20.0100
#2:    3   6 19.750 241.5000 107.5000 2.920000 3.337500 19.8300
#3:    3   8 15.050 357.6167 194.1667 3.120833 4.104083 17.1425
#4:    4   4 26.925 102.6250  76.0000 4.110000 2.378125 19.6125
#5:    4   6 19.750 163.8000 116.5000 3.910000 3.093750 17.6700
#6:    5   4 28.200 107.7000 102.0000 4.100000 1.826500 16.8000
#7:    5   6 19.700 145.0000 175.0000 3.620000 2.770000 15.5000
#8:    5   8 15.400 326.0000 299.5000 3.880000 3.370000 14.5500

Vi kanske inte vill beräkna mean med grupper. För att beräkna medelvärdet för alla bilar i dataset vi inte anger by variabel.

mtcars[ , lapply(.SD, mean), .SDcols = cols_chosen] 

#        mpg     disp       hp     drat      wt     qsec
#1: 20.09062 230.7219 146.6875 3.596563 3.21725 17.84875

Obs: Det är inte nödvändigt att definiera cols_chosen förväg. .SDcols kan direkt ta kolumnnamn



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow