如何在宽格式data.frame上运行ANOVA?

Vic*_*her 4 r reshape dataframe anova

我被教导使用公式运行ANOVA:aov(因变量〜自变量,数据集)

但我正在努力解决如何为特定数据集运行ANOVA,因为它分为三列,每列包含一个值.三列被指定为新生儿,青少年和成年人(这是仓鼠年龄),每列中的值代表血压值.我需要进行一项测试,以确定血压和年龄之间是否存在关系.

这是R中的数据:

> hamster
   Newborn adolescent adult
1      108        110   105
2      110        105   100
3       90        100    95
4       80         90    85
5      100        102    97
6      120        110   105
7      125        105   100
8      130        115   110
9      120        100    95
10     130        120   115
11     145        130   125
12     150        125   120
13     130        135   130
14     155        130   125
15     140        120   115
Run Code Online (Sandbox Code Playgroud)

混淆是因为因变量是每列中的那些值^

Mel*_*Key 6

第一步是重新排列数据,使其处于"长"格式而不是"宽"格式.这可以使用reshape函数在base R中完成,但是gathertidyr包中使用该函数要容易得多:

library(tidyr)
result <- hampster %>%
  gather(age, bp) %>%
  aov(bp ~ age, .)
Run Code Online (Sandbox Code Playgroud)

使用tidyr也为我们提供了管道运算符(%>%),让你以一种漂亮的方式将命令链接在一起.默认情况下,它通过获取前一个函数的结果并将其作为下一个函数的第一个参数插入来工作.在你的aov函数中,我们使用.运算符覆盖它,以显式地将gather函数产生的数据集作为第二个参数.

  • 是的,这就是你回答的问题,我赞成了答案.然而OP应该知道我说的是一个问题. (4认同)

Kar*_*ius 5

R有一个有用的函数,stack用于将您的数据格式转换为ANOVA所需的格式.

aov(values ~ ind, stack(hamster))

# Call:
#
# aov(formula = values ~ ind, data = stack(hamster))
#
# Terms:
#                       ind Residuals
# Sum of Squares   1525.378 11429.867
# Deg. of Freedom         2        42
#
# Residual standard error: 16.49666
# Estimated effects may be unbalanced
Run Code Online (Sandbox Code Playgroud)