Лучший способ фильтрации кадра данных с помощью dplyr с помощью OR?
У меня есть кадр данных в R с столбцами subject1
и subject2
(которые содержат заголовки Библиотеки Конгресса). Я хотел бы отфильтровать фрейм данных, проверяя, соответствуют ли темы утвержденному списку. Скажем, например, что у меня есть этот фрейм данных.
data <- data.frame(
subject1 = c("History", "Biology", "Physics", "Digital Humanities"),
subject2 = c("Chemistry", "Religion", "Chemistry", "Religion")
)
И пусть это список одобренных тем.
condition <- c("History", "Religion")
Что я хочу сделать, это фильтр либо subject1, либо subject2:
subset <- filter(data, subject1 %in% condition | subject2 %in% condition)
Это возвращает элементы 1, 2 и 4 из исходного кадра данных, если требуется.
Это лучший способ фильтровать по нескольким полям, используя, а не логику? Кажется, должен быть лучший, более идиоматический способ, но я не знаю, что это такое.
Возможно, более общий способ задать вопрос - сказать, если я объединю subject1 и subject2, есть ли способ тестирования, если какое-либо значение в одном векторе соответствует любому значению в другом векторе. Я бы хотел написать что-то вроде:
subset <- filter(data, c(subject1, subject2) %in% condition)
Ответы
Ответ 1
Я не уверен, лучше ли этот подход. По крайней мере, вам не нужно писать имена столбцов:
library(dplyr)
filter(data, rowSums(sapply(data, "%in%", condition)))
# subject1 subject2
# 1 History Chemistry
# 2 Biology Religion
# 3 Digital Humanities Religion