[英]tidyverse: ANOVA for each level of a factor
I want to perform ANOVA for each level of a factor. 我想为每个级别的因子执行ANOVA。 I can do this with dplyr::do
but would like to have with purrr
also. 我可以用dplyr::do
做到这一点,但也想和purrr
一起purrr
。 Any hint, please. 请提出任何提示。
library(tidyverse)
df1 <- mtcars
df1$cyl <- factor(df1$cyl)
df1$gear <- factor(df1$gear)
fm1 <-
df1 %>%
dplyr::group_by(gear) %>%
dplyr::do(m1 = summary(aov(mpg ~ cyl, data = .)))
fm1$m1
> fm1$m1
[[1]]
Df Sum Sq Mean Sq F value Pr(>F)
cyl 2 69.03 34.52 4.596 0.033 *
Residuals 12 90.11 7.51
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
[[2]]
Df Sum Sq Mean Sq F value Pr(>F)
cyl 1 137.3 137.3 8.123 0.0172 *
Residuals 10 169.0 16.9
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
[[3]]
Df Sum Sq Mean Sq F value Pr(>F)
cyl 2 167.4 83.68 16.74 0.0564 .
Residuals 2 10.0 5.00
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
fm2 <-
df1 %>%
dplyr::group_by(gear) %>%
tidyr::nest() %>%
dplyr::mutate(m2 = purrr::map(.x = data, .f = ~ summary(aov(mpg ~ cyl, data = .)))) %>%
tidyr::unnest()
You can use a nested dataframe and then save all summaries in a new list column: 您可以使用嵌套数据框,然后将所有摘要保存在新列表列中:
library(tidyverse)
df1 <- mtcars
df_aov <- df1 %>%
dplyr::group_by(gear) %>%
tidyr::nest() %>%
dplyr::mutate(.data = .,
aov_results = data %>% purrr::map(.x = ., .f = ~ summary(aov(mpg ~ cyl, data = .))))
df_aov$aov_results[[1]]
#> Df Sum Sq Mean Sq F value Pr(>F)
#> cyl 1 137.3 137.3 8.123 0.0172 *
#> Residuals 10 169.0 16.9
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Created on 2018-10-02 by the reprex package (v0.2.1) 由reprex包创建于2018-10-02(v0.2.1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.