Я пытаюсь вычислить «взвешенное» скользящее среднее значение группы, исключая значение собственной группы, когда группа имеет несколько наблюдений. Это связано с моим более ранним вопросом среднее значение группы с несколькими переменными группирования, исключая значение собственной группы . Ключевое отличие состоит в том, что этот метод неприменим, поскольку в настоящее время группа имеет несколько наблюдений.
Основываясь на следующем наборе данных, вот операция, которую я хочу применить. Например, новая переменная для первых двух строк займет 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])))
Спасибо, что нашли время, чтобы прочитать это!