首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用使用dplyr和rstatix包从ANOVA中的数据表的列来执行计算?

如何使用使用dplyr和rstatix包从ANOVA中的数据表的列来执行计算?
EN

Stack Overflow用户
提问于 2022-01-05 11:39:38
回答 1查看 123关注 0票数 2

我有一个数据框架,并在数据之间做了一个方差分析。在ANOVA之后,我想使用其中一个结果列进行计算,并创建一个带有mutate()函数的新列。但是,出现一个错误,指示不能对anova类对象执行此操作:

代码语言:javascript
复制
Error: `x` must be a vector, not a <anova_test/data.frame/rstatix_test> object.

有人能帮我用方差分析结果的F列进行计算(F + 1)吗?

代码语言:javascript
复制
library(dplyr)
library(rstatix)

Temperature <- factor(c(rep("cold", times = 4),
                        rep("hot", times = 4)),
                      levels = c("cold", "hot"))

Light <- factor(rep(c(rep("blue", times = 2),
                      rep("yellow", times = 2)),
                    times = 2),
                levels = c("blue", "yellow"))

Result <- c(90.40, 85.20, 21.70, 25.30,
            75.12, 77.36, 6.11, 10.8)

Data <- data.frame(Temperature, Light, Result)

NewColumn <- Data %>%
  anova_test(formula = Result ~ Temperature*Light) %>%
  mutate(New= `F` + 1) #<-------- Not working
EN

回答 1

Stack Overflow用户

发布于 2022-01-05 14:00:40

正如JKupzig在评论中提到的,这是dplyr中已知的一个问题,如这里所记录的:https://github.com/tidyverse/dplyr/issues/5286

这个问题是由于anova_test()按照这个顺序创建了一个具有类anova_testdata.framerstatix_test的输出数据框架,而如果类向量中的最后一个元素不是data.frame,则dplyr中的mutate()似乎会被挂起。您可以按照以下方式验证anova输出的类:

代码语言:javascript
复制
Data %>% anova_test(formula = Result ~ Temperature*Light) %>% class()

[1] "anova_test"   "data.frame"   "rstatix_test"

作为解决办法,您可以在as_tibble()之后向dplyr管道中添加anova_test()。这会按照这个顺序将类重置为tbl_dftbldata.frame

代码语言:javascript
复制
Data %>% anova_test(formula = Result ~ Temperature*Light) %>% as_tibble() %>% class()

[1] "tbl_df"     "tbl"        "data.frame"

Data %>%
    anova_test(formula = Result ~ Temperature*Light) %>% 
    as_tibble() %>%
    mutate(New= `F` + 1)

# A tibble: 3 x 8
  Effect              DFn   DFd        F         p `p<.05`   ges     New
  <chr>             <dbl> <dbl>    <dbl>     <dbl> <chr>   <dbl>   <dbl>
1 Temperature           1     4   42.2   0.003     "*"     0.914   43.2 
2 Light                 1     4 1041.    0.0000055 "*"     0.996 1042.  
3 Temperature:Light     1     4    0.725 0.442     ""      0.153    1.72

注意,此操作移除类anova_testrstatix_test。如果这些类在整个过程中都很重要,那么使用与magrittr包不同的magrittr解决方案(magrittrdplyr的依赖项,因此不需要单独安装)。

代码语言:javascript
复制
Data %>%
    anova_test(formula = Result ~ Temperature*Light) %>%
    magrittr::set_class(c("anova_test", "rstatix_test", "data.frame")) %>% 
    class()

[1] "anova_test"   "rstatix_test" "data.frame" 

Data %>%
   anova_test(formula = Result ~ Temperature*Light) %>%
   magrittr::set_class(c("anova_test", "rstatix_test", "data.frame")) %>% 
   mutate(New = `F` + 1)

ANOVA Table (type II tests)

             Effect DFn DFd        F        p p<.05   ges      New
1       Temperature   1   4   42.250 3.00e-03     * 0.914   43.250
2             Light   1   4 1041.366 5.50e-06     * 0.996 1042.366
3 Temperature:Light   1   4    0.725 4.42e-01       0.153    1.725
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70592231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档