R (tidyverse), filter

列を選択する場合は、select() 関数を用いますが、それに対して、「行を選択する」には、 filter() 関数を用います。

filter(対象のデータ, 条件式)

具体的には、下記のようになります。filter(result_data, Symbol == "AAA") の部分。

> result_data
# A tibble: 3 x 5
  Id    Symbol Description   Sample1 Sample2
  <chr> <chr>  <chr>           <dbl>   <dbl>
1 id1   AAA    lorem ipsum a       1       4
2 id2   BBB    lorem ipsum b       2       5
3 id3   CCC    lorem ipsum c       3       6
>
>
> filter(result_data, Symbol == "AAA")
# A tibble: 1 x 5
  Id    Symbol Description   Sample1 Sample2
  <chr> <chr>  <chr>           <dbl>   <dbl>
1 id1   AAA    lorem ipsum a       1       4

条件式には、かつ (AND)、または (OR) の表現も可能です。AND を意味するの記号が & 、OR を意味する記号が | です。(&&, || と2つ書くとエラーにはなりませんが、違う動作になるため注意しましょう。)下記は、 Sample1 の値が 1 以上、かつ、 Sample2 の値が 2 以上という条件の例です。

> filter(result_data, Sample1 > 1 & Sample2 > 2)
# A tibble: 2 x 5
  Id    Symbol Description   Sample1 Sample2
  <chr> <chr>  <chr>           <dbl>   <dbl>
1 id2   BBB    lorem ipsum b       2       5
2 id3   CCC    lorem ipsum c       3       6

文字列が対象で、複雑な条件式(正規表現など)が必要な場合は、stringr パッケージを用います。(tidyverse を読み込むと自動で読み込まれます。)

例えば、「特定の文字列を含む」という条件式は、 str_detect() を使います。filter() の条件式の部分に str_detect(対象の文字列, パターン) を記述します。

> filter(result_data, str_detect(Description, "ipsum a"))
# A tibble: 1 x 5
  Id    Symbol Description   Sample1 Sample2
  <chr> <chr>  <chr>           <dbl>   <dbl>
1 id1   AAA    lorem ipsum a       1       4

stringr パッケージには、他にも、文字列を置換 (str_replace) したり、連結 (str_c) したりする関数が含まれています。

検出 (str_detect), 置換 (str_replace), 連結 (str_c), 大文字に変換(str_to_upper), 小文字に変換 (str_to_lower), 先頭だけ大文字 (str_to_title)

https://stringr.tidyverse.org

 

投稿者:

Atsushi Doi

株式会社セルイノベーター、主任研究員。理学博士。山口大学大学院理工学研究科修了。東京大学医科学研究所ヒトゲノム解析センターの特任助手を経て、株式会社GNIに主任研究員として勤務。その後、株式会社セルイノベーターの立ち上げに参加し、現在に至る。専門は、バイオインフォマティクス、おもにシステムバイオロジー。