web-dev-qa-db-ja.com

情報Rを失うことなく係数を数値に変換します(as.numeric()は機能しないようです)

可能性のある複製:
R-情報を失わずに因子をRの整数\数値に変換する方法

As.numeric()関数に関する次の事実が私の注意を引きました

> blah<-c("4","8","10","15")
> blah
[1] "4"  "8"  "10" "15"
> blah.new<-as.factor(blah)
> blah.new
[1] 4  8  10 15
Levels: 10 15 4 8
> blah.new1<-as.numeric(blah.new)
> blah.new1
[1] 3 4 1 2

As.numeric()を使用して、レベル4、8、10、および15の因子を量的変数に変換すると、すべての数値がランキングに変換され、元の値が失われます。

レベル10、15、4、8のベクター「blah.new」を取得して、数値10、15、4、8に変換するにはどうすればよいですか?

(この問題は、量的変数がread.table()によって読み取られて要因になるデータセットのために発生しました)

ありがとうございました!!!!

*****更新:それを考え出した******

blah.new1<-as.numeric(as.character(blah.new))

しかし、as.numeric()のドキュメントのどこで、この関数が引数をランキングのリストに変換すると言っているのでしょうか?

29
Michael

まず、因子はインデックスとレベルで構成されます。この事実は、ファクターに苦労している場合に非常に重要です。

例えば、

> z <- factor(letters[c(3, 2, 3, 4)])

# human-friendly display, but internal structure is invisible
> z
[1] c b c d
Levels: b c d

# internal structure of factor
> unclass(z)
[1] 2 1 2 3
attr(,"levels")
[1] "b" "c" "d"

ここでは、zには4つの要素があります。
インデックス2, 1, 2, 3この順序で。
レベルは、それぞれに関連付けられていますインデックス:1-> b、2-> c、3-> d。

次に、as.numericは、単にファクタのindex部分を数値に変換します。
as.characterはインデックスとレベルを処理し、レベルで表される文字ベクトルを生成します。

?as.numericは、要素はデフォルトのメソッドによって処理されると言います。

28
kohske