Ricerca…


introduzione

Il simbolo speciale .SD è disponibile in j di DT[i,j,by] , catturando l'ubset S di D ata per ciascun by gruppo di superstiti del filtro, i . .SDcols è un aiuto. Digita ?`special-symbols` per i documenti ufficiali.

Osservazioni

Un promemoria: DT[where, select|update|do, by] è usato per lavorare con le colonne di un data.table.

  • La parte "dove" è l'argomento i
  • La parte "select | update | do" è l'argomento j

Questi due argomenti vengono generalmente passati per posizione anziché per nome.

Utilizzando .SD e .SDcols

.SD

.SD fa riferimento al sottoinsieme di data.table per ciascun gruppo, escludendo tutte le colonne utilizzate by .

.SD insieme a lapply può essere utilizzato per applicare qualsiasi funzione a più colonne per gruppo in un data.table

Continueremo a utilizzare lo stesso set di dati mtcars , mtcars :

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

Media di tutte le colonne nel set di dati per numero di cilindri , 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

Oltre a cyl , ci sono altre colonne categoriali nel set di dati come vs , am , gear e carb . Non ha senso prendere la mean di queste colonne. Quindi escludiamo queste colonne. Questo è dove .SDcols entra nella foto.

.SDcols

.SDcols specifica le colonne di data.table che sono incluse in .SD .

Media di tutte le colonne (colonne continue) dell'insieme di dati di numero di marce gear , e il numero di cilindri, cyl , disposti da gear e 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

Forse non vogliamo calcolare la mean per gruppi. Per calcolare la media per tutte le auto nel set di dati, non specifichiamo la variabile by .

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

Nota: non è necessario definire prima cols_chosen . .SDcols può prendere direttamente i nomi delle colonne



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow