data.table
Utilisation de .SD et .SDcols pour le sous-ensemble de données
Recherche…
Introduction
.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