データフレームから、grep
を使って、特定の行を抽出する方法。
今回は、下記データ(Data)を使用。
> print(Data)
ID Cohort Sex Age ADNC LBDSubtype
1 149 LBD M 83 Low BP
2 634 AD M 78 High DN
3 632 AD F 75 High BP
4 901 LBD M 74 Not TL
5 621 AD F 78 High BP
6 490 LBD+AD M 74 High DN
7 197 LBD+AD F 83 Int TL
8 351 LBD+AD M 84 Int DN
9 075 LBD M 81 Low TL
10 376 LBD+AD F 75 Int DN
grepを使って、行の抽出
特定の行を抽出
grepは [ ](square brackets)と一緒に使う。
[ ] (square brackets)を使って、各要素にアクセスする方法は、下記参照。 この基本を使って、データフレームの行や列を抽出する。 今回は、下記データ(Data)を使用。 > print(Data) ID …
データ[grep(条件),]
例えば、Dataの中から、”ADNC”が”Int”の行を抽出する場合。
data_a <- Data[grep("Int", Data$ADNC),]
data_a
output
ID Cohort Sex Age ADNC LBDSubtype
7 197 LBD+AD F 83 Int TL
8 351 LBD+AD M 84 Int DN
10 376 LBD+AD F 75 Int DN
特定の行「以外」の行を抽出
指定した条件以外の行を抽出するときは、オプションでinvert = TRUE
を指定すればOK。
data_c
output
ID Cohort Sex Age ADNC LBDSubtype
1 149 LBD M 83 Low BP
2 634 AD M 78 High DN
3 632 AD F 75 High BP
4 901 LBD M 74 Not TL
5 621 AD F 78 High BP
6 490 LBD+AD M 74 High DN
9 075 LBD M 81 Low TL
メタ文字との組み合わせ
grep()
は、メタ文字と組み合わせて色々な条件の行を抽出できる。
例えば、”ID”の最初が ”6” で始まる行を抽出する場合。
data_b <- Data[grep("6..", Data$ID),]
output
ID Cohort Sex Age ADNC LBDSubtype
2 634 AD M 78 High DN
3 632 AD F 75 High BP
5 621 AD F 78 High BP
例えば、”ID”の最初が ”6” か "3" で始まる行を抽出する場合。
data_c <- Data[grep("[6|3]..", Data$ID),]
output
ID Cohort Sex Age ADNC LBDSubtype
2 634 AD M 78 High DN
3 632 AD F 75 High BP
5 621 AD F 78 High BP
8 351 LBD+AD M 84 Int DN
10 376 LBD+AD F 75 Int DN
例えば、”ID”の最初が ”6” 以外で始まる行を抽出する場合。
data_d <- Data[grep("[^6]..", Data$ID),]
output
ID Cohort Sex Age ADNC LBDSubtype
1 149 LBD M 83 Low BP
4 901 LBD M 74 Not TL
6 490 LBD+AD M 74 High DN
7 197 LBD+AD F 83 Int TL
8 351 LBD+AD M 84 Int DN
9 075 LBD M 81 Low TL
10 376 LBD+AD F 75 Int DN
例えば、”ID”の最初が ”6” で、その次が ”1” か "2" か "3" で始まる行を抽出する場合。
data_e <- Data[grep("6(1|2|3).", Data$ID),]
output
ID Cohort Sex Age ADNC LBDSubtype
2 634 AD M 78 High DN
3 632 AD F 75 High BP
5 621 AD F 78 High BP
Rで使用するメタ文字
grep
, match
, gsub
,
sub
などの関数はメタ文字と一緒に使うと強力。
⋯⋯なので、できるだけ覚えておくべし。
メタ文字 | 意味 |
. | 任意の一文字 |
* | 直前のパターンを、0 回以上繰り返す |
+ | 直前のパターンを、1 回以上繰り返す |
? | 直前のパターンを、0 回または 1 回だけ繰り返す |
{3,6} | 前出パターンが、3回以上6回以下繰り返す。 |
( ) | 複数の文字を一つのパターンとしてまとめる。 |
[ ] | [ ] に囲まれた文字列のうちいずれかの1文字を表す。 |
^ | 先頭。ただし、[ ] の中で使うと、「それ以外」を表す。 |
| | "A"|"B"で、「AまたはB」のように使う。 |
$ | ”データ$列名”という形でよく使う。 |
\ | メタ文字の直前に置いて、そのメタ文字をエスケープする。 |
色々使える正規表現の覚え書き。 正規表現(Regular Expression, Regex)とは 正規表現とは、「いくつかの文字列を一つの形式で表現するための表現方法」。 この形式を使えば、違う言葉etc.が入った文字 …