使用R中的过滤功能一次创建多个数据帧

时间:2018-04-26 23:22:14

标签: r tidyverse

我正在尝试创建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

我想知道是否有更有效的方法来创建这些数据帧。

1 个答案:

答案 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。