日誌

Rメモ >> 記事詳細

2015/07/05

因子型変数の水準の順序(levels)を変える

Tweet ThisSend to Facebook | by mtsuchi
とりあえずデータセットのことは考えないで,基本をおさえるために
オブジェクトだけで考えていきます。データセットを意識している場合は,
各オブジェクトの前にdataset$のようにつけてあげる必要があります。

まず,普通の数字を確認します。

n<-1:4
n


[1] 1 2 3 4

作成したオブジェクトnがどのようなものなのか,次の関数で確認してみます。

mode(n)

[1] "numeric"

class(n)

[1] "integer"

numericは数値であり,integerは整数であるという意味です。
次は,この数値を文字にしてみます。

nc<-c("one","two","three","four")
nc

[1] "one"   "two"   "three" "four"

mode(nc)

[1] "character"

class(nc)

[1] "character"

どちらもcharacterで,変数の内容が文字という情報です。
次に,この文字のオブジェクトを因子型に変換したncfという
オブジェクトを作ります。

ncf<-factor(nc)
ncf

[1] one   two   three four
Levels: four one three two

オブジェクトの中身の値と同時に,Levelsという情報もつくように
なりました。そしてよくみると,levelsの並び順がアルファベット順になってます。
これが本記事をまとめたきっかけとなった,抑えておきたい点です。
またオブジェクトがどんなものか確認します。

mode(ncf)

[1] "numeric"

class(ncf)

[1] "factor"

数値という情報と,factor(因子)という情報が出てきました。
つまり,値は数値だけれど,文字として表現される構造のものが,
因子型ということです。

しかし,今のままでは,数値の対応が
1:four, 2:one, 3:three, 4:two
となっているため,混乱してしまいます。

これを
1:one, 2:two, 3:three, 4:four
にするためには,以下のようにすればよいです。

ncfr<-factor(ncf,levels=c("one","two","three","four"))
ncfr

[1] one   two   three four
Levels: one two three four

これで,Levelsの並びも想定どおりになりました。

ちなみに,数値で表示される因子型の作成も可能です。
先ほど作ったnを使って,

nf<-factor(n)
nf

[1] 1 2 3 4 Levels: 1 2 3 4

こちらは,数字の順に水準が決まるので,なにもせずとも,Levelsの並びが想定
どおりとなります。

関連記事:
パッケージltmのEnvironmentデータと因子型の説明
17:15 | 投票する | 投票数(0) | コメント(0)