将data.frame(或向量)中的列转换为因子

时间:2014-10-24 00:22:04

标签: r data-manipulation

我经常遇到问题。我经常在表示条件的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中是否有一种快速简便的方法可以将前者转换为后者格式?

3 个答案:

答案 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