我正在尝试创建14个独立的数据帧,以便分别对每个数据帧运行ANOVA。 (如果有一种方法可以在不创建这些数据帧的情况下运行14个单独的ANOVA,请告诉我。)我有一个大而整齐的数据框,其中有一个“数字”列,用于指定问题编号。
run
我知道我可以通过以下方式逐个创建单个数据帧:
id number value
1 1 2
1 2 1
1 3 4
2 1 4
2 2 3
2 3 4
我想知道是否有更有效的方法来创建这些数据帧。
答案 0 :(得分:3)
使用dplyr::do
,我们可以轻松地为每个组进行计算。如果我们在broom::tidy
结果(一致变量名称)上使用anova
,我也会显示改进/标准化结果,有关详情,请参阅broom and dplyr vignette。
library(tidyverse)
tbl <- read_table2(
"id number value
1 1 2
1 2 1
1 3 4
2 1 4
2 2 3
2 3 4"
)
tbl %>%
group_by(number) %>%
do(anova(lm(value ~ number, data = .)))
#> Warning in anova.lm(lm(value ~ number, data = .)): ANOVA F-tests on an
#> essentially perfect fit are unreliable
#> # A tibble: 3 x 6
#> # Groups: number [3]
#> number Df `Sum Sq` `Mean Sq` `F value` `Pr(>F)`
#> <int> <int> <dbl> <dbl> <dbl> <dbl>
#> 1 1 1 2.00e+ 0 2.00e+ 0 NA NA
#> 2 2 1 2.00e+ 0 2.00e+ 0 NA NA
#> 3 3 1 7.89e-31 7.89e-31 NA NA
library(broom)
tbl %>%
group_by(number) %>%
do(tidy(anova(lm(value ~ number, data = .))))
#> Warning in anova.lm(lm(value ~ number, data = .)): ANOVA F-tests on an
#> essentially perfect fit are unreliable
#> # A tibble: 3 x 7
#> # Groups: number [3]
#> number term df sumsq meansq statistic p.value
#> <int> <chr> <int> <dbl> <dbl> <dbl> <dbl>
#> 1 1 Residuals 1 2.00e+ 0 2.00e+ 0 NA NA
#> 2 2 Residuals 1 2.00e+ 0 2.00e+ 0 NA NA
#> 3 3 Residuals 1 7.89e-31 7.89e-31 NA NA
由reprex package(v0.2.0)创建于2018-04-26。