Одним из вариантов может быть извлечение столбца 'coefs' (.$coefs
), установка имен столбца list
со столбцом 'cyl', цикл по list
с помощью map
, преобразование его в data.frame
, создайте новый столбец на основе имен строк и используйте .id
для создания столбца 'cyl' из names
из list
library(tidyverse)
mtcars %>%
group_by(cyl) %>%
do(model=lm(mpg~ wt + hp, data=.)) %>%
mutate(coefs = list(summary(model)$coefficients)) %>%
select(-model) %>%
{set_names(.$coefs, .$cyl)} %>%
map_df(~ .x %>%
as.data.frame %>%
rownames_to_column('term'), .id = 'cyl')
# cyl term Estimate Std. Error t value Pr(>|t|)
#1 4 (Intercept) 45.83607319 4.78693568 9.575243 1.172558e-05
#2 4 wt -5.11506233 1.60247105 -3.191984 1.276524e-02
#3 4 hp -0.09052672 0.04359827 -2.076383 7.151610e-02
#4 6 (Intercept) 32.56630096 5.57482132 5.841676 4.281411e-03
#5 6 wt -3.24294031 1.37365306 -2.360815 7.759393e-02
#6 6 hp -0.02219994 0.02017664 -1.100279 3.329754e-01
#7 8 (Intercept) 26.66393686 3.66217797 7.280896 1.580743e-05
#8 8 wt -2.17626765 0.72094143 -3.018647 1.168393e-02
#9 8 hp -0.01367295 0.01073989 -1.273099 2.292303e-01
Если мы хотим использовать tidy
, затем измените содержимое map_df
на
... %>%
map_df(~ .x %>%
broom::tidy(.), .id = 'cyl')
Кроме того, другой вариант - nest
после group_by
и затем примените broom::tidy
к объекту model
а затем unnest
mtcars %>%
group_by(cyl) %>%
nest %>%
mutate(data = map(data, ~ .x %>%
summarise(model = list(broom::tidy(lm(mpg ~ wt + hp)))))) %>%
unnest %>%
unnest