Фильтрация кадра данных на векторе
У меня есть кадр данных df
с столбцом идентификатора, например A
, B
и т.д. У меня также есть вектор, содержащий определенные ID:
L <- c("A", "B", "E")
Как я могу отфильтровать фрейм данных, чтобы получить только идентификаторы, присутствующие в векторе? В отдельности я бы использовал
subset(df, ID == "A")
но как я могу фильтровать весь вектор?
Ответы
Ответ 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 пат:)