我有以下数据格式:
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做到这一点?
答案 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