1. ホーム
  2. r

[解決済み] data.frameの行を論理的な条件によってフィルタリングする

2022-03-08 15:19:07

質問

からの行をフィルタリングしたい。 data.frame 論理的な条件に基づいています。例えば、次のようなデータフレームがあるとします。

   expr_value     cell_type
1    5.345618 bj fibroblast
2    5.195871 bj fibroblast
3    5.247274 bj fibroblast
4    5.929771          hesc
5    5.873096          hesc
6    5.665857          hesc
7    6.791656          hips
8    7.133673          hips
9    7.574058          hips
10   7.208041          hips
11   7.402100          hips
12   7.167792          hips
13   7.156971          hips
14   7.197543          hips
15   7.035404          hips
16   7.269474          hips
17   6.715059          hips
18   7.434339          hips
19   6.997586          hips
20   7.619770          hips
21   7.490749          hips

私がしたいことは、同じように見えるが、1つのcell_typeのデータのみを持つ新しいデータフレームを取得することです。例えば、セルタイプ "hesc" を含む行をサブセット/選択します。

   expr_value     cell_type
1    5.929771          hesc
2    5.873096          hesc
3    5.665857          hesc

または、細胞タイプ "bj fibroblast" または "hesc" のいずれかです。

   expr_value     cell_type
1    5.345618 bj fibroblast
2    5.195871 bj fibroblast
3    5.247274 bj fibroblast
4    5.929771          hesc
5    5.873096          hesc
6    5.665857          hesc

何か簡単な方法はないでしょうか?

試してみました。

expr[expr[2] == 'hesc']
# [1] "5.929771" "5.873096" "5.665857" "hesc"     "hesc"     "hesc"    

元のデータフレームを "expr" と呼ぶと、ご覧のように間違ったフォーマットで結果が表示されます。

解決方法は?

によって行を選択する場合 一つ 'cell_type' (例: 'hesc') を使用します。 == :

expr[expr$cell_type == "hesc", ]

2つ以上の異なる 'cell_type' に従って行を選択するには、(例えば 'hesc' のどちらか) または bj線維芽細胞') を使用します。 %in% :

expr[expr$cell_type %in% c("hesc", "bj fibroblast"), ]