Как исправить ошибку «x и w должны иметь одинаковую длину» в summarise_all ()? - PullRequest
1 голос
/ 02 июля 2019

Я хочу использовать dplyr :: summarise_all () и weighted.mean для вычисления средневзвешенных значений многих столбцов для каждой группы.

Я пытался напрямую использовать анонимную функцию, но она вернула ошибку: «x» и «w» должны иметь одинаковую длину.Я знаю, что могу использовать summaze () и weighted.mean, но таким образом мне нужно указать все имена столбцов, а это не то, что мне нужно.

result = df%>%
  group_by(A)%>%
  summarise_all(function(x){weighted.mean(x, .$B)})

Здесь у фрейма данных есть столбец группы A, вес столбца B и другие столбцы.Я ожидаю, что средневзвешенные значения других столбцов по столбцу B для каждой группы в A. Я надеюсь, что смогу сделать это, используя dplyr и weighted.mean, но я в порядке с другими доступными методами.

1 Ответ

0 голосов
/ 02 июля 2019

Нам не нужно .$, поскольку .$ извлекает значение всего столбца вместо значений, соответствующих структуре группировки

df %>%
   group_by(A)%>%
   summarise_all(list(~ weighted.mean(., B)))

Это также может быть записано без лямбда-функции(~), если мы предоставляем параметры явно

df %>%
   group_by(A)%>%
   summarise_all(weighted.mean, w = B)
...