web-dev-qa-db-ja.com

フィールドが関係する条件に基づいてデータフレームのサブセットを抽出する

さまざまな場所からの医療調査の結果を含む大きなCSVがあります(場所はデータに存在する要因です)。一部の分析は場所に固有であり、便宜上、それらの場所からのみ行を持つサブフレームを抽出したいと思います。場所は最初のフィールドなので、CSV行を並べ替えることでできますが、他の列でこれが必要になると確信しているので、Rでそれを行う方法を学びたいと思います。

簡単に言えば、質問は次のとおりです。データフレームfooが与えられた場合、fooからの行のみを含む別のデータフレームバーを作成するにはどうすればよいですか(foo$location = 'there'?)。

55

2つの主なアプローチを次に示します。私はこれを読みやすくすることを好みます:

bar <- subset(foo, location == "there")

&および|を使用して多くの条件をストリング化して、複雑なサブセットを作成できることに注意してください。

2つ目は、インデックス作成のアプローチです。数値スライスまたはブールスライスを使用して、Rの行にインデックスを付けることができます。 foo$location == "there"は、Tの行と同じ長さのFおよびfoo値のベクトルを返します。これにより、条件がtrueを返す行のみを返すことができます。

foo[foo$location == "there", ]
93
JoFrhwld

上記の答えを拡張するために、列名を指定するのではなく、列にインデックスを付けることもできます。列名は、何をしているのかにもよります。あなたの場所が最初のフィールドであるとすると、次のようになります。

    bar <- foo[foo[ ,1] == "there", ]

これは、特定の列に対するループなど、列の値に対して操作を実行できるため便利です(行番号にインデックスを付けることでも同じことができます)。

列の範囲を指定できるため、複数の列で何らかの操作を実行する必要がある場合にも便利です。

    foo[foo[ ,c(1:N)], ]

または、予想される特定の列。

    foo[foo[ ,c(1,5,9)], ]
1
DryLabRebel