科学の箱

科学・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

検定力分析(パワーアナリシス)

研究に必要な精度に対するサンプル数を求めるための分析方法 下記が詳しい http://miuse.mie-u.ac.jp/bitstream/10076/11867/1/10C15625.pdf ht …

no image

条件付きでレコードを取得する

データフレームでは条件付きでレコードを取得できる。 以下のようなフォーマットのデータフレームを考える id name height vector1 <- c(1, 2, 3, 4, 5) vec …

no image

Rによるやさしい統計学/5-統計的検定-2

練習問題-2 勉強時間と定期試験の点数についてデータを作成する。 study_time <- c(1, 3, 10, 12, 6, 3, 8, 4, 1, 5) point <- c(20 …

no image

Rで日付データをhistgramで表示するときのポイント

Rでヒストグラムはhist()関数を使って描画する。この時与えるデータによりブレーク引数が異なることがわかった。 まず下記がデフォルトのhist()関数のヘルプである。 hist(x, breaks …

no image

因子分析

因子分析とは 因子分析では複雑な現象を単純な要因で理解するための手法。集められた個別のデータは結果である目的変数とその目的変数の原因である説明変数に分かれる。目的変数を観察できた結果とし、目的変数に影 …

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

side bar top



アーカイブ

カテゴリー