【发布时间】:2020-03-07 18:19:39
【问题描述】:
我一直在尝试使用 data.table 获得一列加权平均值,其中排除了每行的一些行。
在以下示例中,FIPS 是 ID 变量,STATE 是组变量。我想计算不包括同一州的相邻县的加权平均值。以及在其他州。
我知道如何实现它,但我想有一种更有效的方法。我不熟悉使用 data.table 的按行操作。有任何想法吗?先感谢您。
library(data.table)
rm(list=ls())
set.seed(920410)
DT <- data.table(FIPS =1:21, STATE = LETTERS[1:2], value=1:3, weight=2:7); DT
DT[, nbs := list(list(sample(1:21, 3))), by= names(DT)]
for(i in 1:nrow(DT)){
DT$neighbor_sum_in_the_same_state[i] <- sum(DT[FIPS %in% unlist(DT$nbs[i]) & STATE == DT$STATE[i], value*weight])
DT$neighbor_sum_in_other_states[i] <- sum(DT[FIPS %in% unlist(DT$nbs[i]) & STATE != DT$STATE[i], value*weight])
}
【问题讨论】:
标签: r loops data.table weighted-average rowwise