(R) Более чистый способ использования map () со списком столбцов - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь отойти от rowwise () для столбцов списка, поскольку я слышал, что команда Tidyverse находится в процессе ее уменьшения.Однако я не привык использовать функции мурлыкания, поэтому считаю, что должен быть лучший способ сделать следующее:

Я создаю список-столбец, содержащий тиббл для каждого вида.Затем я хочу пойти в таблицу и взять среднее значение определенных переменных.В первом случае используется карта, а во втором - строчное решение, которое я лично считаю чище.

Кто-нибудь знает лучший способ использования карты в этой ситуации?

library(tidyverse)
iris %>% 
  group_by(Species) %>% 
  nest() %>% 
  mutate(mean_slength = map_dbl(data, ~mean(.$Sepal.Length, na.rm = TRUE)),
         mean_swidth = map_dbl(data, ~mean(.$Sepal.Width, na.rm = TRUE))
         )
#> # A tibble: 3 x 4
#>   Species    data              mean_slength mean_swidth
#>   <fct>      <list>                   <dbl>       <dbl>
#> 1 setosa     <tibble [50 x 4]>         5.01        3.43
#> 2 versicolor <tibble [50 x 4]>         5.94        2.77
#> 3 virginica  <tibble [50 x 4]>         6.59        2.97

iris %>% 
  group_by(Species) %>% 
  nest() %>% 
  rowwise() %>% 
  mutate(mean_slength = mean(data$Sepal.Length, na.rm = TRUE),
         mean_swidth = mean(data$Sepal.Width, na.rm = TRUE))
#> Source: local data frame [3 x 4]
#> Groups: <by row>
#> 
#> # A tibble: 3 x 4
#>   Species    data              mean_slength mean_swidth
#>   <fct>      <list>                   <dbl>       <dbl>
#> 1 setosa     <tibble [50 x 4]>         5.01        3.43
#> 2 versicolor <tibble [50 x 4]>         5.94        2.77
#> 3 virginica  <tibble [50 x 4]>         6.59        2.97

Создано в 2018-12-26 с помощью пакета представить (v0.2.1)

1 Ответ

0 голосов
/ 27 декабря 2018

Вместо двух map используйте один, с summarise_at

library(tidyverse)
iris %>% 
   group_by(Species) %>% 
   nest() %>% 
   mutate(out = map(data, ~ 
               .x  %>% 
                 summarise_at(vars(matches('Sepal')), 
              funs(mean_s = mean(., na.rm = TRUE))))) %>% 
   unnest(out)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...