科学の箱

科学・IT・登山の話題

R

factor

投稿日:

factorを利用することでベクトルやデータフレームで質的変数を取り扱うことができる。

ファクター化するフィールドに対してfactor()関数を適用すると、ファクター化されたベクトルが取得できる。

値として”L”, “M”, “H”の文字列から成り立つベクトルを作る。

> x <- rep(c("L", "M", "H"), 9)
> x
 [1] "L" "M" "H" "L" "M" "H" "L" "M" "H" "L" "M" "H" "L" "M" "H" "L" "M" "H"
[19] "L" "M" "H" "L" "M" "H" "L" "M" "H"

このベクトルに対してfactor()を適用する。

> x.fc <- factor(x)

ファクタ化された値の一覧はlevels()で取得できる。

> levels(x.fc)
[1] "H" "L" "M"

ファクタではないフィールドにlevels()を適用しても要約は戻ってこない。

> levels(x)
NULL

ファクタ化された値はtable()関数を使って頻度を簡単に取得できる。

> table(x)
x
H L M 
9 9 9

データフレームではファクタでサブセットを取得することができる。

> xdf <- data.frame(x, x.fc)
[1] "x"    "x.fc"
> xdf[xdf$x=="L",]
   x x.fc
1  L    L
4  L    L
7  L    L
10 L    L
13 L    L
16 L    L
19 L    L
22 L    L
25 L    L
> xdf[xdf$x.fc=="L",]
   x x.fc
1  L    L
4  L    L
7  L    L
10 L    L
13 L    L
16 L    L
19 L    L
22 L    L
25 L    L

factorは順番を持たない。上記の場合”L”, “M”, “H”の間に順序はないために値としての違いを示すだけとなる。このような例としては血液型や色の種類別がある。これらはすべて異なったものを指し示すだけであり、それぞれの値について大小や優劣を比較することはできない。

Rでは順番を持つfactor型がある。通知表の”優”, “並”, “劣”は順番を持つ一例である。まずデータフレームを作成する。

> y <- data.frame(rep(c("L1", "L2", "L3"),10), seq(1,30,1))
> names(y) <- c("level", "seq")
> y
   level seq
1     L1   1
2     L2   2
3     L3   3
4     L1   4
|

cutを使ってseqをカテゴリに分ける。1~30の値なので、3毎に分けたカテゴリを設定する。

> y$seq_cut <- cut(y$seq, breaks=seq(1, 30, 3), right=FALSE, ordered_result=TRUE)
> y
   level seq seq_cut
1     L1   1   [1,4)
2     L2   2   [1,4)
3     L3   3   [1,4)
4     L1   4   [4,7)
5     L2   5   [4,7)
6     L3   6   [4,7)
|

seq_cutの型をみてあげるとOrd.factorになっていることがわかる。

> str(y)
'data.frame':   30 obs. of  3 variables:
 $ level  : Factor w/ 3 levels "L1","L2","L3": 1 2 3 1 2 3 1 2 3 1 ...
 $ seq    : num  1 2 3 4 5 6 7 8 9 10 ...
 $ seq_cut: Ord.factor w/ 3 levels "(0,10]"<"(10,20]"<..: 1 1 1 1 1 1 1 1 1 1 ...

levels()でファクターの一覧を見てみる。

> levels(y$seq_cut)
[1] "(0,10]"  "(10,20]" "(20,30]"

度数分布も作成できる。

> table(y$seq_cut)

 (0,10] (10,20] (20,30] 
     10      10      10

サブセットを作るときにはダブルクォーテーションで囲んであげる。

> y[y$seq_cut=="(0,10]",]
   level seq seq_cut
1     L1   1  (0,10]
2     L2   2  (0,10]
3     L3   3  (0,10]
4     L1   4  (0,10]
5     L2   5  (0,10]
|

メタ情報

inarticle



メタ情報

inarticle



-R
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

Rでのラインの表示

Rでラインを引くために関数がいくつか用意されている。 abline() 画像全体に線を引く segments() 始点と終点を指定してその間に線を引く points() “点” …

no image

R Dataset – bone

データの説明 261人の子供たちから得られた年齢別骨密度。 フォーマット idnum: 識別コード age: 測定時の年齢 gender: 性別 spnbmd: 骨密度 チェック テーブル全体について …

no image

cexについてまとめる

Rでグラフィックのパラメータはpar()で指定する。par()のパラメータを変更することでplotなどの表示方法を柔軟に変更できる。例えばラベルのフォントの大きさなどである。下記はpar()で指定でき …

no image

dataanalysis-002-week4

クラスタリング SVDと組み合わせることでよりクラスに分かれているクラスタリングを実行できる。 散布図でクラスタリングする変数を探す クラスタリング SVDを実行する SVDの結果をクラスタリングに取 …

no image

diag

3×3の対角行列を生成する > diag(3) [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 3×3の対角行列を生成し、対角 …

2014年4月
« 3月   5月 »
 123456
78910111213
14151617181920
21222324252627
282930  

side bar top



アーカイブ

カテゴリー