我有一个如下所示的数据框,但有许多其他行。 “内容”和“过程”都可以是“ 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
我知道如何对以这种方式设置的数据运行多个ANOVA。我将运行以下命令:
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()将其放回与上面相同的格式。我通常使用整洁的数据,而ANOVA是我仍然对不整洁的数据进行的仅有的分析之一。另外,如果您认为按照我的方式进行ANOVA操作确实更好,并且我想通过尝试在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
答案 0 :(得分:0)
只需使用tidyr的gather()
重塑形状并运行相同的过程:
sdf <- tidyr::spread(tidy_data, dv, value)
sdf
# content process dv1 dv2 dv3
# 1 a a 1 3 4
# 2 a n 2 1 2
# 3 n a 5 3 5
# 4 n n 4 3 2
dv <- sdf[,3:5]
output <- lm(as.matrix(dv) ~ content * process, data = sdf,
contrasts = list(content = contr.sum, process = contr.sum))
summary(aov(output))
数据
txt <- "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"
tidy_data <- read.table(text = txt, header = TRUE)
答案 1 :(得分:0)
“整洁”的方式是将nest
的数据dv
,然后使用purrr::map
对嵌套的数据进行ANOVA。
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
,它们分别包含list
和tibble
中的aov
。
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)