Я пытаюсь получить средневзвешенное значение для группы с несколькими группирующими переменными и исключая значение собственной группы. Это связано с моим предыдущим постом Получить среднее значение для группы с несколькими группирующими переменными и исключить значение собственной группы , но когда я применил его к своему фактическому вопросу (который получает взвешенное среднее), я обнаружил, что это гораздо больше сложнее, чем получить простое среднее. Вот что я имею в виду под этим.
df <- data_frame(
state = rep(c("AL", "CA"), each = 6),
county = rep(letters[1:6], each = 2),
year = rep(c(2011:2012), 6),
value = c(91,46,37,80,33,97,4,19,85,90,56,94),
wt = c(1,4,3,5,1,4,5,1,5,5,4,1)
) %>% arrange(state, year)
Для невзвешенного среднего значения должен работать следующий код (из принятого ответа моего предыдущего поста).
df %>%
group_by(state, year) %>%
mutate(q = (sum(value) - value) / (n()-1))
Требуемая переменная new_val, которая является средневзвешенным значением, будет следующей. Например, первые две строки столбца new_val рассчитываются как 37 * 3/4 + 33 * 1/4 = 36, 91 * 1/2 + 33 * 1/2 = 62.
# A tibble: 12 x 6
state county year value wt new_val
<chr> <chr> <int> <dbl> <dbl> <dbl>
1 AL a 2011 91 1 36
2 AL b 2011 37 3 62
3 AL c 2011 33 1 50.5
4 AL a 2012 46 4 87.6
5 AL b 2012 80 5 71.5
6 AL c 2012 97 4 64.9
7 CA d 2011 4 5 72.1
8 CA e 2011 85 5 27.1
9 CA f 2011 56 4 44.5
10 CA d 2012 19 1 90.7
11 CA e 2012 90 5 56.5
12 CA f 2012 94 1 78.2
Я искал похожие посты, имея в виду взвешенное среднее, но все доступные были для простых средних случаев. Любые комментарии будут с благодарностью. Спасибо!