R:因子在转换为

时间:2016-05-31 09:23:43

标签: r object transformation elements

我有一个荒谬的问题:每当我把它变成一个列并使用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_recverw_rec都是因素(同一类对象)
  • 没有加载任何包,但如果它们(如car),同样的东西
  • 问题发生在cbind,但不是,例如sort(bek_rec)
  • 问题仍然是我在保存工作区后是否重新打开RStudio以及未保存后。

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的因子分配看起来是一样的。我知道它可能有点多余,但它做了它应该做的事情。

有谁知道发生了什么?我变得有点绝望,非常感谢任何想法!

1 个答案:

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