Tôi muốn tính toán độ lệch từ (trọng số) trung bình cho nhiều biến số trong một data.table
.Làm cách nào để tính toán sai lệch so với giá trị trung bình có trọng số trong data.table?
Hãy lấy ví dụ này thiết lập:
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
tôi có thể tính toán các phương tiện có trọng số x
và y
như sau:
mydt[
,
lapply(
as.list(.SD)[c("x", "y")],
weighted.mean, w = w
),
by = id
]
(tôi sử dụng tương đối phức tạp as.list(.SD)[...]
xây dựng thay vì .SDcols
vì lỗi this.)
Tôi đã cố gắng tạo phương tiện cho mỗi hàng, nhưng không tìm thấy cách kết hợp :=
với lapply()
.
Bạn chỉ có thể làm '. (X, y)' thay vì 'as.list (.SD) [c (" x "," y ")]' .... –
@DavidArenburg Cảm ơn. Nó thực sự đơn giản hơn nhưng cũng mất các tên biến ban đầu, bạn nhận được 'V1' và' V2' thay vì 'x' và' y'. – janosdivenyi
Sau đó '.SD [,. (X, y)]'? –