mutate - filtros con dplyr
¿Mejor manera de filtrar un cuadro de datos con dplyr usando OR? (1)
No estoy seguro de si este enfoque es mejor. Al menos no tienes que escribir los nombres de las columnas:
library(dplyr)
filter(data, rowSums(sapply(data, "%in%", condition)))
# subject1 subject2
# 1 History Chemistry
# 2 Biology Religion
# 3 Digital Humanities Religion
Tengo un marco de datos en R con las columnas subject1
y subject1
(que contienen encabezados de materia de la Biblioteca del Congreso). Me gustaría filtrar el marco de datos probando si los sujetos coinciden con una lista aprobada. Digamos, por ejemplo, que tengo este marco de datos.
data <- data.frame(
subject1 = c("History", "Biology", "Physics", "Digital Humanities"),
subject2 = c("Chemistry", "Religion", "Chemistry", "Religion")
)
Y supongamos que esta es la lista de asignaturas aprobadas.
condition <- c("History", "Religion")
Lo que quiero hacer es filtrar por asunto1 o asunto2:
subset <- filter(data, subject1 %in% condition | subject2 %in% condition)
Eso devuelve los elementos 1, 2 y 4 del marco de datos original, según se desee.
¿Es esa la mejor manera de filtrar por múltiples campos usando o en lugar de y lógica? Parece que debe haber una forma mejor, más idiomática, pero no sé qué es.
Quizás una forma más genérica de formular la pregunta es decir, si combino subject1 y subject2, ¿hay alguna forma de comprobar si algún valor en un vector coincide con algún valor en otro vector? Me gustaría escribir algo como:
subset <- filter(data, c(subject1, subject2) %in% condition)