【发布时间】:2020-01-20 16:25:17
【问题描述】:
当一个组有多个观察值时,我正在尝试计算组“加权”滚动平均值,同时排除自己的组值。这与我之前的问题group "weighted" mean with multiple grouping variables and excluding own group value 有关。关键区别在于,这种方法不容易适用,因为现在一个组有多个观察值。
基于以下数据集,这是我要应用的操作。例如,前两行的新变量将采用 19*9/18 + 48*3/18 + 6*2/18 + 31*4/18 = 25.05。接下来的两行将占用 81*1/10 + 52*3/10 + 6*2/10 + 31*4/10 = 37.3,依此类推。
set.seed(57)
df <- data.frame(
state = rep(c("AL", "CA"), each = 12),
year = rep(c(2011:2012), 12),
county = rep(letters[1:6], each = 4),
value = sample(100, 24),
wt = sample(10, 24, replace = T)
) %>% arrange(state, year)
如果我应用以下代码,问题是来自同一县的观察结果也包含在加权平均公式中。
df %>%
group_by(state, year) %>%
mutate(new_val = purrr::map_dbl(row_number(),
~weighted.mean(value[-.x], wt[-.x])))
作为一种解决方法,我尝试了以下方法(首先在县年内找到加权平均值并应用上面的代码),但两者并没有产生相同的结果,尽管有些相似。
df %>%
group_by(state, county, year) %>%
mutate(wp = weighted.mean(value, wt),
wt2 = sum(wt)) %>%
distinct(state, year, county, wp, wt2) %>%
ungroup() %>%
group_by(state, year) %>%
mutate(new_val = purrr::map_dbl(row_number(),
~weighted.mean(wp[-.x], wt2[-.x])))
感谢您抽出宝贵时间阅读本文!
【问题讨论】: