我有一个荒谬的问题:每当我把它变成一个列并使用cbind
时,一个因素就会改变它的元素。因素看起来像这样:
> bek_rec
[1] 4 3 4 2 2 3 4 4 3 3 5 3 4 4 3 4 4 4 4 3 3 4 2 3 4 4 4 3 4 4 4
[32] 4 3 3 3 4 4 4 4 3 3 3 4 4 3 4 4 4 4 3 4 4 3 3 4 4 4 4 3 4 5 5
[63] 3 3 4 3 3 3 (...)
一旦我使用cbind(bek_rec)
,它就像这样:
> cbind(bek_rec)
bek_rec
[1,] 3
[2,] 2
[3,] 3
[4,] 1
[5,] 1
[6,] 2
[7,] 3
[8,] 3
[9,] 2
[10,] 2
[11,] 4
[12,] 2
[13,] 3
[14,] 3
[15,] 2
[16,] 3
如您所见,这些元素并不相同。当我cbind
与其他因素时,会发生同样的事情。
另一方面,这个因素确实不:
> verw_rec
[1] 2 2 3 2 2 3 2 4 4 5 4 2 2 3 4 3 4 4 4 4 5 3 2 2 4 3 4 4 2 3 4
[32] 4 3 2 2 3 3
> cbind(verw_rec)
verw_rec
[1,] 2
[2,] 2
[3,] 3
[4,] 2
[5,] 2
[6,] 3
[7,] 2
[8,] 4
[9,] 4
[10,] 5
[11,] 4
[12,] 2
bek_rec
和verw_rec
都是因素(同一类对象)car
),同样的东西cbind
,但不是,例如sort(bek_rec)
bek_rec
的因素分配如下:
typmed3$bek_rec <- typmed$bek;
levels(typmed3$bek_rec) <- factor(c(2,3,3.5,4,4.5,5))
bek_rec <- factor(typmed$bek)
levels(bek_rec) <- factor(c(2,3,3.5,4,4.5,5))
levels(bek_rec) <- c("2","3","3","4","4","5"). #rounds .5s down.
verw_rec
的因子分配看起来是一样的。我知道它可能有点多余,但它做了它应该做的事情。
有谁知道发生了什么?我变得有点绝望,非常感谢任何想法!
答案 0 :(得分:0)
您需要在尝试cbind之前将因子转换为数值。
这可以通过将stringsAsFactors = FALSE
添加到read.table()
命令来完成:
bek_rec[] <- lapply(bek_rec, as.character)
你在verw_rec中获得奇数值的原因是因为你绑定了因子的索引,而不是它们所代表的值。因此,我们对上述代码所做的是删除因子并用实际值替换它们。
有关更多信息,请查看这两个Q / A:
Convert data.frame columns from factors to characters
How to convert a factor to an integer\numeric without a loss of information?