df
、A
などのID列を持つデータフレームB
があります。特定のIDを含むベクターもあります。
L <- c("A", "B", "E")
ベクターに存在するIDのみを取得するようにデータフレームをフィルター処理するにはどうすればよいですか?個人的には、
subset(df, ID == "A")
しかし、どうすればベクトル全体をフィルタリングできますか?
_%in%
_演算子を使用できます。
_> df <- data.frame(id=c(LETTERS, LETTERS), x=1:52)
> L <- c("A","B","E")
> subset(df, id %in% L)
id x
1 A 1
2 B 2
5 E 5
27 A 27
28 B 28
31 E 31
_
IDが一意の場合は、match()
を使用できます。
_> df <- data.frame(id=c(LETTERS), x=1:26)
> df[match(L, df$id), ]
id x
1 A 1
2 B 2
5 E 5
_
または、それらをデータフレームの行名にして、行ごとに抽出します。
_> rownames(df) <- df$id
> df[L, ]
id x
A A 1
B B 2
E E 5
_
最後に、より上級者向けで、速度が問題になる場合は、_data.table
_パッケージを調べることをお勧めします。
「マッチ」を使用する必要があると思います。これは、1つのベクトルの値を別のベクトルの値に一致させ、一致しないNAを提供します。したがって、一致の!is.naに基づいてサブセットを作成します。
?matchを参照してください。おそらく自分で解決することができます。その場合、誰かがすぐに行う正確な回答から多くのことを学び、カットアンドペーストを勧めます:)