科学の箱

科学・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によるやさしい統計学/7-分散分析

(1)学部によりテストの結果に有意な差があるかを調べる。 データはcsv形式で作成し、7_1_test_score.csvとする。以下はデータの内容。 法学部,文学部,理学部,工学部 75,62,65 …

no image

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

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

no image

findFn{sos}

findFn{sos} findFn(string, maxPages = 20, sortby = NULL, verbose = 1, …) 文字列から関数を探すことができる。パッケー …

no image

dataanalysis-002-week3

exploratory analysis グラフの目的 データのおおよそを理解する パターンを探す モデリングを探す デバッグ コミュニケーション boxplot 値のレンジを確認する 他の値とレンジ …

no image

rvestで読み込むcssを調べる方法

rvestで対象とするhtmlのブロックは下記のように取得できる。 http://blog.rstudio.com/2014/11/24/rvest-easy-web-scraping-with-r/ …

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

side bar top



アーカイブ

カテゴリー