Если вы используете список в качестве сводного вывода, вы можете использовать функции unnest()
из пакета tidyr .
Разрабатываемая версия tidyr имеет несколько новых функций, включая unnest_wider()
, который является удобным инструментом для вашей ситуации.
Здесь я возьму только 5 чисел статистики бокса и внесу их в список в summarise()
, так же, как вы начали делать. Я также называю их, так как статистика из boxplot.stats()
не имеет никакой идентифицирующей информации.
Новый столбец является столбцом списка, содержащим именованный вектор из 5 значений для каждого вида.
library(dplyr)
library(tidyr) # development version, tidyr_0.8.3.9000
iris %>%
group_by(Species) %>%
summarise(boxplot= list( setNames(boxplot.stats(Sepal.Length)$stats,
c('lower_whisker','lower_hinge','median','upper_hinge','upper_whisker') ) ) )
# A tibble: 3 x 2
Species boxplot
<fct> <list>
1 setosa <dbl [5]>
2 versicolor <dbl [5]>
3 virginica <dbl [5]>
После этого с unnest_wider()
вы получите желаемый результат.
iris %>%
group_by(Species) %>%
summarise(boxplot= list( setNames(boxplot.stats(Sepal.Length)$stats,
c('lower_whisker','lower_hinge','median','upper_hinge','upper_whisker') ) ) ) %>%
unnest_wider(boxplot)
# A tibble: 3 x 6
Species lower_whisker lower_hinge median upper_hinge upper_whisker
<fct> <dbl> <dbl> <dbl> <dbl> <dbl>
1 setosa 4.3 4.8 5 5.2 5.8
2 versicolor 4.9 5.6 5.9 6.3 7
3 virginica 5.6 6.2 6.5 6.9 7.9
Вы можете пропустить этап именования, но тогда вам нужно будет назвать столбцы в конце.
iris %>%
group_by(Species) %>%
summarise(boxplot= list( boxplot.stats(Sepal.Length)$stats ) ) %>%
unnest_wider(boxplot)
# A tibble: 3 x 6
Species ...1 ...2 ...3 ...4 ...5
<fct> <dbl> <dbl> <dbl> <dbl> <dbl>
1 setosa 4.3 4.8 5 5.2 5.8
2 versicolor 4.9 5.6 5.9 6.3 7
3 virginica 5.6 6.2 6.5 6.9 7.9
Неработающая версия tidyr все еще может помочь в этом, хотя работа займет еще несколько шагов. Поскольку имена списков теряются в текущем unnest()
, вам нужно будет добавить их вручную перед отменой, чтобы вы могли spread()
в новых столбцах.
iris %>%
group_by(Species) %>%
summarise(boxplot= list( boxplot.stats(Sepal.Length)$stats),
stat = list( c('lower_whisker','lower_hinge','median','upper_hinge','upper_whisker') ) ) %>%
unnest(stat, boxplot) %>%
spread(stat, boxplot)
# A tibble: 3 x 6
Species lower_hinge lower_whisker median upper_hinge upper_whisker
<fct> <dbl> <dbl> <dbl> <dbl> <dbl>
1 setosa 4.8 4.3 5 5.2 5.8
2 versicolor 5.6 4.9 5.9 6.3 7
3 virginica 6.2 5.6 6.5 6.9 7.9