我不理解数据框上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帮忙!
答案 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
。这并没有改变任何东西,因为两个函数都会将因子转换为内部表示,如在线帮助中所述:
因子和有序因素被其内部代码所取代。