我有一个如下所示的数据框,但有许多附加行。 “内容”和“过程”都可以是“a”或“n”。
dv1 dv2 dv3 content process
1 3 4 a a
2 1 2 a n
5 3 5 n a
4 3 2 n n
我知道如何对以这种方式设置的数据运行多个方差分析。我将运行以下命令:
dv <- df[,1:3]
output <- lm(as.matrix(dv) ~ content * proces, data = df,
contrasts = list(content = contr.sum, process = contr.sum))
summary(aov(output))
我想知道是否有一种方法可以在整洁的数据帧上执行相同的操作,而无需使用 spread() 将其恢复为与上面相同的格式。我通常使用整洁的数据,而方差分析是我仍然对不整洁的数据进行的唯一分析之一。或者,如果您认为按照我一直以来的方式运行方差分析确实更好,并且我通过尝试在 tidyverse 中完成所有操作为自己创造了更多工作,请告诉我。
这就是整洁的数据框的样子:
dv value content process
dv1 1 a a
dv1 2 a n
dv1 5 n a
dv1 4 n n
dv2 3 a a
dv2 1 a n
dv2 3 n a
dv2 3 n n
dv3 4 a a
dv3 2 a n
dv3 5 n a
dv3 2 n n
最佳答案
“整洁”的方法是通过 dv
嵌套数据,然后使用 purrr::map
对嵌套数据执行方差分析.
library(tidyverse)
df.aov <- df %>%
group_by(dv) %>%
nest() %>%
mutate(aov = map(data, ~aov(value ~ content * process, data = .x)))
df.aov$aov
#[[1]]
#Call:
# aov(formula = value ~ content * process, data = .x)
#
#Terms:
# content process content:process
#Sum of Squares 9 0 1
#Deg. of Freedom 1 1 1
#
#Estimated effects may be unbalanced
#
#[[2]]
#Call:
# aov(formula = value ~ content * process, data = .x)
#
#Terms:
# content process content:process
#Sum of Squares 1 1 1
#Deg. of Freedom 1 1 1
#
#Estimated effects may be unbalanced
#
#[[3]]
#Call:
#aov(formula = value ~ content * process, data = .x)
#
#Terms:
# content process content:process
#Sum of Squares 0.25 6.25 0.25
#Deg. of Freedom 1 1 1
#
#Estimated effects may be unbalanced
df.aov
包含两列 data
和 aov
,其中包含 tibble< 的
list
分别是/code>s 和 aov
s。
示例数据
df <- read.table(text =
"dv value content process
dv1 1 a a
dv1 2 a n
dv1 5 n a
dv1 4 n n
dv2 3 a a
dv2 1 a n
dv2 3 n a
dv2 3 n n
dv3 4 a a
dv3 2 a n
dv3 5 n a
dv3 2 n n", header = T)
关于r - 在 R 中对整齐数据同时执行多个方差分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52192719/