Создание нескольких фреймов данных одновременно с использованием функции фильтра в R - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь создать 14 отдельных фреймов данных, чтобы запустить ANOVA на каждом из них в отдельности. (Если есть способ запустить 14 отдельных ANOVA без создания этих фреймов данных, пожалуйста, дайте мне знать.) У меня есть большой, аккуратный фрейм данных с колонкой «число», которая определяет номер вопроса.

id  number  value
1   1       2
1   2       1
1   3       4
2   1       4
2   2       3
2   3       4

Я знаю, что могу создать отдельные кадры данных один за другим следующим образом:

df1 <- filter(df, number == 1) 
df2 <- filter(df, number == 2) 
df3 <- filter(df, number == 3)

Мне интересно, есть ли более эффективный способ создания этих фреймов данных.

1 Ответ

0 голосов
/ 27 апреля 2018

Используя dplyr::do, мы можем легко сделать расчет для каждой группы. Я также показываю улучшенный / стандартизированный результат, если мы используем broom::tidy в результатах anova (имена переменных соответствуют одному), см. метла и виньетка dplyr для получения дополнительной информации.

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

Создано в 2018-04-26 пакетом представ. (v0.2.0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...