R subset関数 データフレームやmatrixからの条件指定による行・列の抽出

R の subset関数は、データフレームやマトリックスから条件にマッチした部分集合を取り出します。条件指定の主なパラメータは、「subset」と「select」です。「subset」では行を抽出するための条件式、「select」では列を抽出する条件を指定します。

R subset関数 データフレームからの抽出

R の subset関数に、対象となるデータ (データフレーム) 、「subset」もしくは「select」で条件を指定することで、条件を満たすデータだけを取り出すことができます。

R> df <- data.frame(name=I(c("kumazou1", "kumazou2", "kumazou3")), 
                     age=c(101, 102, 103), 
                     color=c("red", "green", "yellow")) 
R> df
      name age  color
1 kumazou1 101    red
2 kumazou2 102  green
3 kumazou3 103 yellow

# subset(行の条件)を指定
R> subset(df, age<103)
      name age color
1 kumazou1 101   red
2 kumazou2 102 green

# select(列の条件)を指定
R> subset(df, select=c(name, color))
      name  color
1 kumazou1    red
2 kumazou2  green
3 kumazou3 yellow

# subsetとselectを組み合わせ
R> df.sub <- subset(df, subset=age<103, select=-2) R> df.sub
      name color
1 kumazou1   red
2 kumazou2 green

R subset関数 データフレーム以外からの抽出

R の subset関数は、ベクターやmatrixでも条件を指定した抽出を行うことができます。

ベクターからの抽出

ベクターの場合は、インデックス形式で直接指定しても簡潔で分り易いです。

R> df.v <- letters 
R> df.v
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" ...
[20] "t" "u" "v" "w" "x" "y" "z"

# subset関数で指定する場合
> subset(df.v, df.v>"w")
[1] "x" "y" "z"

# 直接指定する場合
> df.v[df.v>"w"]
[1] "x" "y" "z"

マトリックスからの抽出

> mt <- matrix(sample(12), 3, 4) 
> mt
     [,1] [,2] [,3] [,4]
[1,]    5    4    2    8
[2,]    1   12   10    7
[3,]    3    9    6   11

# subset関数で行と列の条件を指定する場合
> subset(mt, mt[,3]>=5, select=c(1,2,3))
     [,1] [,2] [,3]
[1,]    1   12   10
[2,]    3    9    6

# 直接指定する場合
> mt[mt[,3]>=5, -4]
     [,1] [,2] [,3]
[1,]    1   12   10
[2,]    3    9    6

関連記事
R 使い方 組込みデータセット iris データフレーム・ベクトル・リスト
R 使い方 for 繰り返し スクリプトの書き方
R 使い方 データ構造まとめ スクリプトの書き方
R 使い方 データ 読込み テキスト,csv,エクセル,データベース スクリプトの書き方

実験データの解析や論文用グラフ作成のヒントになりそうな、プログラミング・統計処理の参考になる書籍をまとめて紹介しています。是非、参考にしてみて下さいね。