2012-02-26 10 views
2

データフレームのdata.matrixの結果がわかりません。目標は、結果をバープロットすることです。データ: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!以下の例を見て、何が起こったのかを確認するに

答えて

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 

そのラベルを維持しながらnumericベクター(あなたがdata.frameに持っているものである)要因を変換するには(そうでない場合レベルをにするだけです)、as.numeric(as.character())のようなものが必要です。

したがって、入力データを正しく読み取るようにしてください(数字が引用されている場合は、options("stringsAsFactors")がTRUEに設定されていると、係数に変換される可能性が高いです)。これは、列方向、例えば、

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を使用していたと思いました。

ファクタと順序付けられた要素は、内部コードで置き換えられているため、何も変更されません。

+0

ありがとうございます。私はすでにas.numeric(as.character(tab.c.graph))を使って私の要素を変換しようとしましたが、強制変換エラーで> NAsを導入し、> level(tab.c.graph)はNULLを返します。私のテーブルの数字は... – Chargaff

+0

data.frame全体でレベルを取得することはできません。特定の要因の変換前のレベルを調べるには、レベル(tab.c.graph $ BacD)を使用する必要があります。 –

+0

はい、変換が動作します。あなたの説明は私を大いに助けました。ありがとう! – Chargaff

関連する問題