科学の箱

科学・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で提供されているirisを使って主成分分析を実施する。 主成分分析の手順 データが分離できるか検証する 主成分負荷量と寄与率を求める 新しい変数に名前を付ける 変量プロット 主成分プロット 今回はR …

no image

Rでのラインの表示

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

no image

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

5章で学ぶこと 5章では検定方法について紹介している。以下の方法について検定対象と検定する条件を理解する。 Z検定 t検定 無相関検定 独立性の検定 また検定の手順についてもまとめている。 検定方法 …

no image

dataanalysis-002-week2

Structure of Data Analysis 質問を定義する 理想的なデータセットの定義 アクセスできるデータの検索 データの取得 クレンジング Exploratory 統計的予測・モデリング …

no image

Rでのランダムデータ作成 – 上級編 (改)

Rでのランダムデータ作成 – 上級編にコメントをいただいたので調べてみた。結果を対比するためにプロットも入れた。 まずデータフレームを使う方法が以下である。 lm1 <- lm(galton$c …

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

side bar top



アーカイブ

カテゴリー