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)
混淆是因为因变量是每列中的那些值^
第一步是重新排列数据,使其处于"长"格式而不是"宽"格式.这可以使用reshape函数在base R中完成,但是gather在tidyr包中使用该函数要容易得多:
library(tidyr)
result <- hampster %>%
gather(age, bp) %>%
aov(bp ~ age, .)
Run Code Online (Sandbox Code Playgroud)
使用tidyr也为我们提供了管道运算符(%>%),让你以一种漂亮的方式将命令链接在一起.默认情况下,它通过获取前一个函数的结果并将其作为下一个函数的第一个参数插入来工作.在你的aov函数中,我们使用.运算符覆盖它,以显式地将gather函数产生的数据集作为第二个参数.
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)