data.table
Verwenden von .SD und .SDcols für die Teilmenge der Daten
Suche…
Einführung
.SD
ist verfügbar j
von DT[i,j,by]
, für die jeweils den S ubset von D aten Erfassung by
Gruppe der Filter zu überleben, i
. .SDcols
ist ein Helfer. ?`special-symbols`
für die offiziellen Dokumente ein.
Bemerkungen
Eine Erinnerung: Die DT[where, select|update|do, by]
Syntax wird verwendet, um mit Spalten einer data.table zu arbeiten.
- "Wo" ist das
i
Argument - Der Teil "select | update | do" ist das Argument
j
Diese beiden Argumente werden normalerweise nach Position statt nach Name übergeben.
Verwenden von .SD und .SDcols
.SD
.SD
bezieht sich auf die Teilmenge der data.table
für jede Gruppe, ausgenommen alle Spalten, die in verwendet by
.
.SD
zusammen mit lapply
verwendet werden, um jede Funktion auf mehrere Spalten nach Gruppe in einer data.table
Wir werden weiterhin dasselbe eingebaute Dataset, mtcars
:
mtcars = data.table(mtcars) # Let's not include rownames to keep things simpler
Mittelwert aller Spalten im Datensatz nach Zylinderanzahl , 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
Neben cyl
gibt es im Datensatz weitere Kategoriespalten wie vs
, am
, gear
und carb
. Es macht keinen Sinn, den mean
dieser Spalten zu nehmen. Lassen Sie uns diese Spalten ausschließen. Hier kommt das .SDcols
ins .SDcols
.
.Scols
.SDcols
gibt die Spalten der data.table
, die in .SD
.
Mittel aller Spalten (continuous Spalten) in der Datenmenge durch die Anzahl der Zahnräder gear
und die Anzahl der Zylinder, cyl
, angeordnet durch gear
und 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
Vielleicht möchten wir den mean
nach Gruppen berechnen. Um den Mittelwert für alle Autos im Datensatz zu berechnen, geben wir die by
Variable nicht an.
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
Hinweis: cols_chosen
muss nicht vorher definiert werden. .SDcols
können .SDcols
direkt übernehmen