我经常遇到问题。我经常在表示条件的data.frame中有多个向量或列。例如:
condition_1 condition_2 condition_3
5.3 2.6 1.2
25.5 2.2 1.4
13.1 0.1 9.2
...
通常我想使用ANOVA比较这些条件。但是,大多数ANOVA函数都需要将数据指定为因子,如下所示:
value condition
5.3 condition_1
25.5 condition_1
13.1 condition_1
2.6 condition_2
2.2 condition_2
0.1 condition_2
1.2 condition_3
1.4 condition_3
9.2 condition_3
...
R中是否有一种快速简便的方法可以将前者转换为后者格式?
答案 0 :(得分:3)
不确定。您可以使用stack
。它不一定“快”但确实很容易。
stack(df)
# values ind
# 1 5.3 condition_1
# 2 25.5 condition_1
# 3 13.1 condition_1
# 4 2.6 condition_2
# 5 2.2 condition_2
# 6 0.1 condition_2
# 7 1.2 condition_3
# 8 1.4 condition_3
# 9 9.2 condition_3
sapply(stack(df), class)
# values ind
# "numeric" "factor"
其中df
是
structure(list(condition_1 = c(5.3, 25.5, 13.1), condition_2 = c(2.6,
2.2, 0.1), condition_3 = c(1.2, 1.4, 9.2)), .Names = c("condition_1",
"condition_2", "condition_3"), class = "data.frame", row.names = c(NA,
-3L))
答案 1 :(得分:3)
来自melt
的{{1}}的替代方法:
reshape2
答案 2 :(得分:3)
或使用新的tidyr
包
library(tidyr)
gather(dat, condition, value, condition_1:condition_3)
# condition value
# 1 condition_1 5.3
# 2 condition_1 25.5
# 3 condition_1 13.1
# 4 condition_2 2.6
# 5 condition_2 2.2
# 6 condition_2 0.1
# 7 condition_3 1.2
# 8 condition_3 1.4
# 9 condition_3 9.2