Подтвердить что ты не робот

Фильтрация кадра данных на векторе

У меня есть кадр данных df с столбцом идентификатора, например A, B и т.д. У меня также есть вектор, содержащий определенные ID:

L <- c("A", "B", "E")

Как я могу отфильтровать фрейм данных, чтобы получить только идентификаторы, присутствующие в векторе? В отдельности я бы использовал

subset(df, ID == "A")

но как я могу фильтровать весь вектор?

4b9b3361

Ответ 1

Вы можете использовать оператор %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

Если ваши идентификаторы уникальны, вы можете использовать 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.

Ответ 2

Я считаю, что вам нужно использовать "match". Он сопоставляет значения в одном векторе с значениями в другом векторе и дает NA, где нет совпадения. Итак, вы подмножество на основе! Is.na матча.

См. "Соответствие", и вы, вероятно, можете сами это решить, и в этом случае вы узнаете больше, чем от точного ответа, который кто-то сделает в ближайшее время, который просто побудит вас вырезать n пат:)