使用data.matrix转换数据帧(因子),结果很奇怪

时间:2012-02-26 17:08:05

标签: r

我不理解数据框上data.matrix的结果。目标是对结果进行描绘。数据:

> tab.c.graph
    BacD BacE BacF
J01    2    6   10
J02    2    2    0
J03    9    4    6
J04    1    7    3
J05   11   10    2
J06    9    7    7
J07    8    3    0
J08    6    2    1
J09    4    3    2
J10    4    4    1
> str(tab.c.graph)
'data.frame':   10 obs. of  3 variables:
 $ BacD: Factor w/ 8 levels "1","11","2"," 2",..: 4 3 8 1 2 8 7 6 5 5
  ..- attr(*, "names")= chr  "J01" "J02" "J03" "J04" ...
 $ BacE: Factor w/ 6 levels "10","2","3","4",..: 5 2 4 6 1 6 3 2 3 4
  ..- attr(*, "names")= chr  "J01" "J02" "J03" "J04" ...
 $ BacF: Factor w/ 8 levels "0","1","10","2",..: 3 1 7 6 5 8 1 2 4 2
  ..- attr(*, "names")= chr  "J01" "J02" "J03" "J04" ...

> data.matrix(tab.c.graph)
    BacD BacE BacF
J01    4    5    3
J02    3    2    1
J03    8    4    7
J04    1    6    6
J05    2    1    5
J06    8    6    8
J07    7    3    1
J08    6    2    2
J09    5    3    4
J10    5    4    2

> str(data.matrix(tab.c.graph))
 int [1:10, 1:3] 4 3 8 1 2 8 7 6 5 5 ...
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:10] "J01" "J02" "J03" "J04" ...
  ..$ : chr [1:3] "BacD" "BacE" "BacF"

为什么data.matrix与我的data.frame有很大不同?如上所述,我只需要绘制这些数据。

Thanx帮忙!

1 个答案:

答案 0 :(得分:4)

要查看发生的情况,请查看以下示例:

> (f <- gl(2, 1, 10, labels=3:4))
 [1] 3 4 3 4 3 4 3 4 3 4
Levels: 3 4
> as.numeric(f)
 [1] 1 2 1 2 1 2 1 2 1 2
> as.numeric(as.character(f))
 [1] 3 4 3 4 3 4 3 4 3 4

因子(您data.frame中的内容)转换为numeric向量,同时保留其标签(否则您只需获得级别),就需要as.numeric(as.character())之类的东西。

因此,要么确保正确读取输入数据(如果引用了数字,options("stringsAsFactors")设置为TRUE,则可能会将它们转换为因子),或者之后转换data.frame。这可以按列完成,例如

dfrm <- data.frame(x=factor(c(3,2,1,8,4)), y=factor(c(5,6,1,2,3)))
m <- sapply(dfrm, function(x) as.numeric(as.character(x)))
plot(m)

我误解了您的问题,我认为您使用的是as.matrix,而不是data.matrix。这并没有改变任何东西,因为两个函数都会将因子转换为内部表示,如在线帮助中所述:

  

因子和有序因素被其内部代码所取代。