0

我不是 R 的新手,但以下是最令人困惑的。

我有一个分类变量的数据框(尽管矩阵同样存在问题),其取值为 +1/-1,我想将其转换为因子。

mat <- matrix(sample(c(-1, +1), 16, replace = T), nrow = 4)
mat <- data.frame(mat)

但是,使用

mat <- apply(mat, 2, factor)

将整数转换为字符而不是因子:

> mat 
     [,1] [,2] [,3] [,4]
[1,] "-1" "1"  "-1" "1" 
[2,] "-1" "-1" "-1" "-1"
[3,] "-1" "1"  "1"  "1" 
[4,] "-1" "-1" "1"  "1" 

也许在同样的情况下(我的一些其他数据也遇到了这种问题)试图将矩阵和数据帧中的字符名称转换为因子会导致更令人困惑的行为:

 mat2 <- matrix(sample(letters, 16, replace = T), nrow = 4)
 > mat2
     [,1] [,2] [,3] [,4]
 [1,] "x"  "m"  "r"  "e" 
 [2,] "u"  "r"  "b"  "p" 
 [3,] "j"  "p"  "h"  "j" 
 [4,] "k"  "s"  "e"  "x" 

mat2[,1] <- factor(mat2[,1])
> mat2
     [,1] [,2] [,3] [,4]
 [1,] "4"  "m"  "r"  "e" 
 [2,] "3"  "r"  "b"  "p" 
 [3,] "1"  "p"  "h"  "j" 
 [4,] "2"  "s"  "e"  "x" 

任何帮助或澄清将不胜感激。

4

1 回答 1

2

永远记住,数据框是列表,因此对列进行操作就像遍历列表的元素一样。我想也许你打算做更多这样的事情:

mat[] <- lapply(mat,factor)

或这个:

as.data.frame(lapply(mat,factor))

尽管即使在这里,请注意每个因素的水平并不相同!

于 2013-06-07T18:33:38.573 回答