R logo

データフレームから、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)と一緒に使う。

データ[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」のように使う。
$ ”データ$列名”という形でよく使う。
\ メタ文字の直前に置いて、そのメタ文字をエスケープする。
にほんブログ村 子育てブログ ワーキングマザー育児へ