在R中为双向anova准备数据

时间:2016-07-21 14:32:25

标签: r anova

我有以下数据格式:

    m1   m2   m3 names
1 24.5 28.4 26.1     1
2 23.5 34.2 28.3     2
3 26.4 29.5 24.3     3
4 27.1 32.2 26.2     4
5 29.9 20.1 27.8     5

如何将此数据准备为我可以提供给R中的aov的格式?

   values ind name 
1    24.5  m1 1
2    23.5  m1 2
3    26.4  m1 3
...

对于anova的一种方式我只使用stack命令。如何在没有循环的情况下为双向anova做到这一点?

3 个答案:

答案 0 :(得分:1)

试试这个

library(reshape2) 
melt(df)

答案 1 :(得分:1)

user2100721使用包给出了答案。没有包导入,这可以解决为

a <- read.table(header=TRUE, text="m1   m2   m3 names
                                  24.5 28.4 26.1     1
                                  23.5 34.2 28.3     2
                                  26.4 29.5 24.3     3
                                  27.1 32.2 26.2     4
                                  29.9 20.1 27.8     5")

reshape(a, direction="long", varying=list(c("m1","m2","m3")))

答案 2 :(得分:1)

上述所有答案的替代方案很好,您可以使用 tidyr 包中的收集。 Gather占用多列并将其折叠为键值对。你需要传递两个变量,一个是,另一个是

X<- structure(list(m1 = c(24.5, 23.5, 26.4, 27.1, 29.9), m2 = c(28.4, 
    34.2, 29.5, 32.2, 20.1), m3 = c(26.1, 28.3, 24.3, 26.2, 27.8), 
        names = 1:5), .Names = c("m1", "m2", "m3", "names"), class = "data.frame", row.names = c(NA, 
    -5L))


library(tidyr)
dat <- X %>% gather(variable, value)

> head(dat,10)
#   variable value
#1        m1  24.5
#2        m1  23.5
#3        m1  26.4
#4        m1  27.1
#5        m1  29.9
#6        m2  28.4
#7        m2  34.2
#8        m2  29.5
#9        m2  32.2
#10       m2  20.1