7. ベクトルデータの操作

n  データのタイプ(型)

Rには大きく4つのタイプのデータがあります.それは,(1) 数値型,(2) 文字列型,(3) 因子型,(4) 論理値型です.まず数値型とは実数値を成分にもつベクトルで,要は,「普通」のベクトルです.1つの数値(例えば”123”)も数値型データです.Rでは1つの数は,「成分の数が1つのベクトル」として扱われるので,以下も複数の成分をもつベクトルだけ考えることにします.

> x=c(1.5, 3.0, 2.1, 4.8)

> x

[1] 1.5 3.0 2.1 4.8

文字列型データは,文字を引用符” “で囲ったデータです.例えば以下のようなデータです,変数名(”ID”, “HEIGHT”など)に使われます.

> y=c("a","bc","def")

> y

[1] "a"   "bc"  "def"

因子型データは,例えば男性を”1”,女性を”2”として入力されたデータです.実際に入力する際には,まず数値として普通にベクトルを作ったあとで,関数as.factor( )を使うことによって,因子型に変換します.こうして作った”1”, “2”はもはや数値としての意味を持ちません.単に「男」「女」を表す記号となったわけです.

> z=c(1,1,1,2,2,2)

> z=as.factor(z)

> z

[1] 1 1 1 2 2 2

Levels: 1 2

因子型データは,各成分の表示のあとに,”Levels:○○という表示がされます.この例では,男女を表す”1””2”2種類のみ列挙されていますが,データによっては数種類の「記号」を含む場合があります(学歴:「中卒」「高卒」「大卒」「大学院卒」など).そのような記号の種類をすべて列挙するのが最後の”Levels:○○の部分です.いわゆるカテゴリカルデータ(質的データ)は,Rでは因子型データとして扱います.

最後に論理値型データは,真(TRUE)と偽(FALSE)だけを成分にもつベクトルのことです.例えば,

> w=c(TRUE,FALSE,TRUE,TRUE) #文字列と異なり,引用符” “は不要!

> w

[1]  TRUE FALSE  TRUE  TRUE

のようなデータです.実際には,いちいち”TRUE””FALSE”と書くのが面倒なので,以下のように”T”あるいは”F”で代用することが多いです.

> w1=c(T,F,T,T)

> w1

[1]  TRUE FALSE  TRUE  TRUE

このタイプのデータは生データとして与えられることはなく,むしろデータを操作する途中で使われます.

データには,数値型・文字列型・因子型・論理値型4種類がある

それぞれの変数のデータの型を確かめるには,関数class( )を使います.

> class(x)

[1] "numeric" # 数値型

> class(y)

[1] "character" #文字列型

> class(z)

[1] "factor" #因子型

> class(w)

[1] "logical" #論理値型

 

ベクトルの操作

データは基本的には,ベクトルとして表されます.そこで,データの操作の第一歩は,ベクトルの操作になります.

まず3番目の成分を取り出すには,

> x[3]

[1] 2.1

とします.2番目と4番目の成分を取り出すには,

> x[c(2,4)]

[1] 3.0 4.8

とします.”c(2,4)”によって,「2番目と4番目の成分」であることを指定しています.逆に,1番目の成分以外すべてを取り出すには,

> x[-1]

[1] 3.0 2.1 4.8

とマイナス記号を使います.応用として,2番目の成分を”2.5”に書き換えるには,

> x[2]=2.5

> x

[1] 1.5 2.5 2.1 4.8

“x[2]”2番目の成分を取り出し,そこに右辺の”2.5”を代入するために”=”を使っています.

 2番目の成分の取り出し→x[2]

2番目と4番目の成分の取り出し→x[c(2,4)]

ベクトルの成分を取り出すには,論理値を使う方法もあります.例えば,ベクトルx2番目と4番目の成分を取り出すために,以下のように論理値を使います.

> x[c(FALSE,TRUE,FALSE,TRUE)]

[1] 2.5 4.8

> x[c(F,T,F,T)] #同じ

[1] 2.5 4.8

これは,取り出す成分にTRUE, 取り出さない成分にFALSEを入れた論理値ベクトルを使っているわけです.

    取り出したい成分のみTRUEを入れた論理値ベクトルでも取り出せる

 

論理値の計算

論理値ベクトルは,普通の数値ベクトルから簡単に作ることができます.例えば数値ベクトルxの成分のなかで2より大きいのはどれでしょうか?答えは簡単で,以下のように計算すれば良いのです.

> x>2

[1] FALSE  TRUE  TRUE  TRUE

不等式”x>2”は,成分ごとに計算され,この不等式が成り立つ成分にはTRUEを,成り立たない成分にはFALSEを返します.不等式のRでの書き方は以下のとおりです.

等式にはイコール”=”2つ使われるのにご注意ください.Rではイコール1つ”=”は代入を意味しますので,「左辺イコール右辺」を表すには区別する必要があるのです.

数値ベクトルxのなかで2より大きく3より小さな成分はどれでしょうか?これは数式では”2<x<3”ですが,Rでは”(2<x) & (x<3)”2つの不等式に分解して,間を”&”で結びます.

> (2<x) & (x<3)

[1] FALSE  TRUE  TRUE  FALSE

1番目と4番目の成分はこの不等式を満たさないことがわかります.このような2つ以上の条件の組み合わせは,Rでは以下のように書きます.

このようにベクトル成分の大小比較などを行って,TRUEFALSEの判定を行うことができます.

 

条件に当てはまる成分の取り出し方

まず,数値ベクトルxのなかで2より大きく3より小さな成分はどれであるか論理値を使って表した結果は,

> (2<x) & (x<3)

 [1] FALSE  TRUE  TRUE  FALSE

でした.この結果を”x[ ]”のカッコのなかに入れると,2番目と3番目の成分のみが取り出されます.

> x[c(FALSE,TRUE,TRUE,FALSE)]

[1] 2.5 2.1

これを一気にやると以下のようになりますね.

> x[(2<x) & (x<3)]

[1] 2.5 2.1

このように条件式をカッコ”[ ]”の中に書けば,その条件を満たす成分のみが取り出されます.

x[条件式]で,条件にあう成分だけ取り出せる

 


課題1

x=c(1,2,3,4,5,6)のなかで,以下の条件式を満たす成分を取り出す式と結果を記しなさい.

(1)  3より大きく,5より小さい

(2)  3より小さいか,5より大きい

(3)  3以下か,5以上

(4)  26でない

(5)  3ではなく,かつ1以上5以下 


課題
2

demodata.csvのなかの収縮期血圧sbp, 拡張期血圧dbpを以下のようにカテゴリー化しなさい.その際,「理想血圧」=bp1, 「正常血圧」=bp2, 「正常高値血圧」=bp3, 「軽症高血圧」=bp4, 「中等症高血圧」=bp5, 「重症高血圧」=bp6と命名し,それぞれのカテゴリーに入る人の数を数えてください.

            

 

Ċ
西山毅,
2011/06/21 12:28
Comments