web-dev-qa-db-ja.com

値のセットに基づいてデータフレームの特定の行のみを保持する

ID列と値の列がいくつかあるデータフレームがあります。その行のIDの値が別の値のセット(たとえば、 "keep"と呼ばれる)と一致するかどうかに基づいて、データフレームの特定の行のみを保持したいと思います。

簡単にするために、ここに例を示します。

_df <- data.frame(ID = sample(rep(letters, each=3)), value = rnorm(n=26*3))
keep <- c("a", "d", "r", "x")
_

KeepのIDと一致するIDのみを持つ行で構成される新しいデータフレームを作成するにはどうすればよいですか? which()関数を使用すると、1文字だけでこれを実行できますが、複数の文字を使用すると、警告メッセージと誤った戻り値が返されます。データフレーム全体でforループを実行してそのように外挿できることはわかっていますが、これについてよりエレガントで効率的な方法があるかどうか疑問に思っています。前もって感謝します。

9
user2849910

_df[df$ID %in% keep, ]_またはsubset(df, ID %in% keep)を試してください- sets のヘルプページを参照してください。

編集:また、これが1文字の場合は、たとえば、 which()を使用する代わりに_df[df$ID == "a", ]_。

18
Adrian