data.table
.SD en .SDcols gebruiken voor de subset van gegevens
Zoeken…
Invoering
.SD
is in j
van DT[i,j,by]
, het vastleggen van de S ubset D ata per by
groepen overleven van de filter, i
. .SDcols
is een helper. Typ ?`special-symbols`
voor de officiële documenten.
Opmerkingen
Een herinnering: DT[where, select|update|do, by]
syntaxis wordt gebruikt om te werken met kolommen van een data.table.
- Het "waar" gedeelte is het
i
argument - Het gedeelte "select | update | do" is het argument
j
Deze twee argumenten worden meestal op positie doorgegeven in plaats van op naam.
.SD en .SDcols gebruiken
.SD
.SD
verwijst naar de subset van de data.table
voor elke groep, exclusief alle kolommen die worden gebruikt by
.
.SD
samen met lapply
worden gebruikt om elke functie toe te passen op meerdere kolommen per groep in een data.table
We zullen dezelfde ingebouwde dataset, mtcars
, mtcars
:
mtcars = data.table(mtcars) # Let's not include rownames to keep things simpler
Gemiddelde van alle kolommen in de gegevensset op aantal cilinders , 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
Afgezien van cyl
zijn er andere categorische kolommen in de gegevensset zoals vs
, am
, gear
en carb
. Het heeft geen zin om het mean
van deze kolommen te nemen. Laten we deze kolommen dus uitsluiten. Dit is waar .SDcols
in beeld komt.
.SDcols
.SDcols
geeft de kolommen van de data.table
die zijn opgenomen in .SD
.
Gemiddelde van alle kolommen (continue kolommen) in de gegevensset van het aantal versnellingen gear
en aantal cilinders, cyl
, geregeld door gear
en 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
Misschien willen we het mean
per groep berekenen. Om het gemiddelde voor alle auto's in de gegevensset te berekenen, geven we de variabele by
niet 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
Opmerking: het is niet nodig om cols_chosen
vooraf te definiëren. .SDcols
kunnen direct kolomnamen aannemen