アメリエフのブログ

バイオインフォマティクスの紹介と社員の日々
<< どこにあるの? | main | ディレクトリ内のファイル数を知りたい >>
Rでgrep
Rのオブジェクトから、特定のキーワードを含む要素だけ抜き出したいときはどうしたらいいでしょうか。

ベクトルの場合はgrep()関数が使用できます(grepの仲間にgrepl、regexpr、gregexpr、regexec、検索後に置換を行うsub、gsubがあります)。
このgrepは文字列からなるベクトルのみに使用できます。

たとえば、Rで図を作成するときに色名指定に使用できる色名の一覧を返してくれるcolors()関数というのがあります。
> iro <- colors()
> head(iro)

[1] "white" "alicered" "antiquewhite" "antiquewhite1" "antiquewhite2" "antiquewhite3"
> is.vector(iro)
[1] TRUE
> class(iro)
[1] "character"
データ構造は文字列から成るベクトルなので、これでgrepを試してみます。
試しに赤系統の色名を探してみます。
赤系統の色名はおそらくredという言葉を含んでいるので、redという言葉で探してみましょう。
> grep("red",iro)
[1] 100 372 373 374 375 376 476 503 504 505 506 507 524 525 526 527 528 552
[19] 553 554 555 556 641 642 643 644 645

返されたのは、redという言葉を含む色名の位置です。
実際に色名が欲しいというときは、オプションを一つ足します。
> grep("red",iro,value="TRUE")
[1] "darkred" "indianred" "indianred1" "indianred2" "indianred3"
[6] "indianred4" "mediumvioletred" "orangered" "orangered1" "orangered2"
[11] "orangered3" "orangered4" "palevioletred" "palevioletred1" "palevioletred2"
[16] "palevioletred3" "palevioletred4" "red" "red1" "red2"
[21] "red3" "red4" "violetred" "violetred1" "violetred2"
[26] "violetred3" "violetred4"

ところで赤系統といえばredの代わりにpinkやmagentaという言葉が含まれていることもあるはずなので、まとめて調べたいですね。
「redまたはpinkまたはmagentaが含まれる文字列」という探し方は以下の通りになります。
> grep("red|pink|magenta",iro,value="TRUE")
[1] "darkmagenta" "darkred" "deeppink" "deeppink1" "deeppink2"
[6] "deeppink3" "deeppink4" "hotpink" "hotpink1" "hotpink2"
[11] "hotpink3" "hotpink4" "indianred" "indianred1" "indianred2"
[16] "indianred3" "indianred4" "lightpink" "lightpink1" "lightpink2"
[21] "lightpink3" "lightpink4" "magenta" "magenta1" "magenta2"
[26] "magenta3" "magenta4" "mediumvioletred" "orangered" "orangered1"
[31] "orangered2" "orangered3" "orangered4" "palevioletred" "palevioletred1"
[36] "palevioletred2" "palevioletred3" "palevioletred4" "pink" "pink1"
[41] "pink2" "pink3" "pink4" "red" "red1"
[46] "red2" "red3" "red4" "violetred" "violetred1"
[51] "violetred2" "violetred3" "violetred4"


他にもオプション次第で様々な正規表現を使った検索が行えます。
便利な関数grep()でした。
| kubo | 統計解析ソフトR | 14:43 | comments(0) | - |









   1234
567891011
12131415161718
19202122232425
262728293031 
<< March 2017 >>

このページの先頭へ