Recherche…


Introduction

Le symbole spécial .SD est disponible dans j de DT[i,j,by] , la capture de la S ubset de D ata pour chacun by groupe survivant du filtre, i . .SDcols est une aide. Tapez ?`special-symbols` pour les documents officiels.

Remarques

Un rappel: la syntaxe DT[where, select|update|do, by] est utilisée pour travailler avec des colonnes d'un data.table.

  • La partie "where" est l'argument i
  • La partie "select | update | do" est l'argument j

Ces deux arguments sont généralement passés par position plutôt que par nom.

Utiliser .SD et .SDcols

.DAKOTA DU SUD

.SD fait référence au sous-ensemble de data.table pour chaque groupe, à l'exclusion de toutes les colonnes utilisées by .

.SD avec lapply peut être utilisé pour appliquer n'importe quelle fonction à plusieurs colonnes par groupe dans un data.table

Nous continuerons à utiliser le même jeu de données mtcars , mtcars :

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

Moyenne de toutes les colonnes du jeu de données par nombre de cylindres , 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

En dehors de cyl , il existe d'autres colonnes catégoriques dans le jeu de données, telles que vs , am , gear et carb . Cela n'a pas vraiment de sens de prendre la mean de ces colonnes. Excluons donc ces colonnes. C'est ici que .SDcols entre en jeu.

.SDcols

.SDcols spécifie les colonnes de data.table incluses dans .SD .

Moyenne de toutes les colonnes (colonnes continues) dans l'ensemble de données selon le nombre d'engrenages gear , et le nombre de cylindres, cyl , disposés par gear et 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

Peut-être que nous ne voulons pas calculer la mean par groupes. Pour calculer la moyenne de toutes les voitures du jeu de données, nous ne spécifions pas la variable 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

Remarque: Il n'est pas nécessaire de définir cols_chosen au préalable. .SDcols peut directement prendre des noms de colonnes



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow