Именование столбцов из поднятого вектора после unnest_wider - PullRequest
2 голосов
/ 01 октября 2019

Играя с некоторыми новыми функциями tidyr 1.0, я натолкнулся на головокружительную голову.

Я использовал boxplot.stats, чтобы получить вектор значений boxplot, которые я хотел бы использовать для построения графика. Я сделал это успешно, но уверен, что есть лучший способ присвоить имена столбцам вновь неопубликованного вектора.

Вот текущая настройка:

library(tidyverse)

iris %>%
  nest(data = -Species) %>%
  mutate(box = map(data, ~ boxplot.stats(.x[["Sepal.Length"]]))) %>%
  hoist(box, stats = "stats") %>%
  unnest_wider(stats) %>%
  rename_at(vars(contains("...")), ~ c("min", "lwr", "med", "upr", "max")) 
#> New names:
#> * `` -> ...1
#> * `` -> ...2
#> * `` -> ...3
#> * `` -> ...4
#> * `` -> ...5
#> New names:
#> * `` -> ...1
#> * `` -> ...2
#> * `` -> ...3
#> * `` -> ...4
#> * `` -> ...5
#> New names:
#> * `` -> ...1
#> * `` -> ...2
#> * `` -> ...3
#> * `` -> ...4
#> * `` -> ...5
#> # A tibble: 3 x 8
#>   Species              data   min   lwr   med   upr   max box             
#>   <fct>      <list<df[,4]>> <dbl> <dbl> <dbl> <dbl> <dbl> <list>          
#> 1 setosa           [50 x 4]   4.3   4.8   5     5.2   5.8 <named list [3]>
#> 2 versicolor       [50 x 4]   4.9   5.6   5.9   6.3   7   <named list [3]>
#> 3 virginica        [50 x 4]   5.6   6.2   6.5   6.9   7.9 <named list [3]>

Создано в 2019 г. -10-01 с помощью пакета Представить (v0.3.0)

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

Спасибо за чтение!

1 Ответ

2 голосов
/ 01 октября 2019

Мы можем преобразовать в list и установить имена

library(tidyverse)
iris %>%
   group_by(Species) %>% 
   nest %>%
   mutate(box = map(data, ~ boxplot.stats(.x[["Sepal.Length"]]))) %>% 
   mutate(stats = map(box, ~ .x$stats %>%
                  as.list %>% 
                  set_names(c("min", "lwr", "med", "upr", "max")))) %>% 
   unnest_wider(stats)
...