R 使い方 データフレーム 抽出 subset関数

バイオインフォ道場、くまぞうです。

データフレームやmatrixからデータの一部を抜き出す操作は頻繁に行います。列名で指定したり、インデックスや条件を指定したりして抽出します。しかし、指定が複雑になると難しく感じることもしばしば。そのようなときは、subset関数の使い方を知っておくと役に立つかもしれません。

スポンサーリンク



subset関数 使い方 データフレーム

subset関数は、ベクター・マトリックス・データフレームから部分集合を取り出す関数です。主なパラメータに、「subset」と「select」があります。「subset」では行を抽出するための条件式を、「select」では抽出する列を指定します。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

subset関数 使い方 データフレーム以外

ベクターやmatrixでもsubset関数を使って抽出することができます。ベクターの場合は、インデックス形式で直接指定しても簡潔で分り易いです。しかし、matrixの場合は、慣れないと分かり難い場合もあるので、subset関数による抽出の指定を知っておくと便利なことがあるかもしれません。

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(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(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
スポンサーリンク