Условный подсчет и среднее по сгруппированным данным без фильтра или left_join - PullRequest
0 голосов
/ 25 июня 2018

Как рассчитать условное число и среднее по сгруппированным данным без фильтра, используя dplyr? Я не хочу сжимать набор данных с помощью фильтра и не хочу оставлять данные в левом соединении, чтобы получить набор данных с оригинальным размером (длиной). Это возможно?

Вот случай:

mtcars%>% filter (cyl> 4, gear <5)%>% group_by (gear, carb, am)%>% mutate (avg_mpg = среднее (mpg, na.rm = T), cnt = n ( ))

Как я могу получить вышеуказанные результаты без использования фильтра или left_join?

1 Ответ

0 голосов
/ 25 июня 2018

Мы можем создать условие в виде логического столбца и использовать его для подстановки «mpg» по группам, чтобы получить значение mean, и аналогично «cnt» вычисляется как sum логического вектора

mtcars %>%
       mutate(ind = cyl > 4 & gear < 5) %>%
       group_by(gear, carb, am) %>%
       mutate(avg_mpg = mean(mpg[ind], na.rm= TRUE),
              cnt = sum(ind)) %>%
       select(-ind)

ПРИМЕЧАНИЕ. Столбец ind создается только потому, что мы используем условия несколько раз.

...