Я использую tidyr::nest()
в сочетании с purrr::map()
(-family), чтобы сгруппировать data.frame
в группы, а затем сделать некоторые интересные вещи с каждым подмножеством.Рассмотрите следующий пример, и , пожалуйста, игнорируйте тот факт, что мне не нужны nest()
и map()
, чтобы сделать это (это упрощенный пример):
library(dplyr)
library(purrr)
library(tidyr)
mtcars %>%
group_by(cyl) %>%
nest() %>%
mutate(
wt_mean = map_dbl(data,~mean(.x$wt))
)
# A tibble: 8 x 4
cyl gear data cly2
<dbl> <dbl> <list> <dbl>
1 6 4 <tibble [4 x 9]> 6
2 4 4 <tibble [8 x 9]> 4
3 6 3 <tibble [2 x 9]> 6
4 8 3 <tibble [12 x 9]> 8
5 4 3 <tibble [1 x 9]> 4
6 4 5 <tibble [2 x 9]> 4
7 8 5 <tibble [2 x 9]> 8
8 6 5 <tibble [1 x 9]> 6
Обычно, когдаЯ делаю этот тип операции, мне нужен доступ к переменной группировки (в данном случае cyl
) в пределах map()
.Но эти группирующие переменные отображаются в виде векторов с длиной, соответствующей количеству строк во вложенном фрейме данных, и, следовательно, не поддаются легко.
Можно ли выполнить следующую операцию?Я бы хотел, чтобы среднее значение wt
было разделено на количество цилиндров (cyl
) на группу (т. Е. Ряд).
mtcars %>%
group_by(cyl,gear) %>%
nest() %>%
mutate(
wt_mean = map_dbl(data,~mean(.x$wt)/cyl)
)
Error in mutate_impl(.data, dots) :
Evaluation error: Result 1 is not a length 1 atomic vector.