Я хотел бы рассчитать отклонения от (взвешенного) среднего значения для многих переменных в data.table
.Как рассчитать отклонения от взвешенного среднего в data.table?
Давайте возьмем этот пример набор:
mydt <- data.table(
id = c(1, 2, 2, 3, 3, 3),
x = 1:6,
y = 6:1,
w = rep(1:2, 3)
)
mydt
id x y w
1: 1 1 6 1
2: 2 2 5 2
3: 2 3 4 1
4: 3 4 3 2
5: 3 5 2 1
6: 3 6 1 2
Я могу рассчитать средневзвешенные из x
и y
следующим образом:
mydt[
,
lapply(
as.list(.SD)[c("x", "y")],
weighted.mean, w = w
),
by = id
]
(я использую относительно сложную as.list(.SD)[...]
конструкцию вместо .SDcols
из-за this ошибка.)
Я попытался сначала создать средства для каждой строки, но не нашел, как объединить :=
с lapply()
.
Вы можете просто сделать '. (X, y)' вместо 'as.list (.SD) [c (" x "," y ")]' .... –
@DavidArenburg Спасибо. Это проще, но также теряет исходные имена переменных, вы получаете 'V1' и' V2' вместо 'x' и' y'. – janosdivenyi
Тогда '.SD [,. (X, y)]'? –