La función filter() en R: filtrar filas (y cómo hacerlo sin dplyr)
filter() se queda con las filas que cumplen una condición. Es una función de dplyr, así que necesitas instalar el paquete:
install.packages("dplyr")
library(dplyr)
Antes de seguir: R base ya sabe filtrar, y lo veremos al final. Si estás empezando, quizá no te haga falta instalar nada.
Ejemplo simple
library(dplyr)
filter(iris, Species == "setosa")
Te devuelve solo las filas de esa especie. La condición va tal cual, usando los nombres de columna sin comillas ni $.
Fíjate en el doble igual ==. Un solo = es asignación, no comparación → es el error más repetido por quien empieza.
Varias condiciones
Se separan por comas, y eso equivale a un "y":
filter(iris, Species == "setosa", Sepal.Length > 5)
Para un "o" se usa la barra vertical:
filter(iris, Species == "setosa" | Species == "virginica")
Y cuando son muchos valores, mejor %in%:
filter(iris, Species %in% c("setosa", "virginica"))
Lo mismo en R base: subset()
Aquí está la parte que casi ningún tutorial te cuenta. Todo lo anterior funciona en R base sin instalar nada:
subset(iris, Species == "setosa")
subset(iris, Species == "setosa" & Sepal.Length > 5)
subset(iris, Species %in% c("setosa", "virginica"))
Prácticamente idéntico. La única diferencia visible es que en subset() las condiciones se unen con & en lugar de con comas.
Y todavía hay una tercera forma, la más clásica, con corchetes:
iris[iris$Species == "setosa", ]
Es más fea de leer, pero es la que verás en código antiguo y la que nunca te va a fallar → no depende de ningún paquete.
Ejemplo algo más completo
Filtrar y quedarte solo con algunas columnas, todo de una vez:
resultado <- subset(iris,
Species == "setosa" & Sepal.Length > 5,
select = c(Sepal.Length, Species))
head(resultado)
subset() acepta el argumento select para elegir columnas, así que resuelve en una sola llamada lo que en dplyr harías con filter() más select().
Nuestra recomendación: usa subset() o los corchetes. dplyr está muy bien y es cómodo cuando encadenas muchas operaciones, pero para filtrar filas te obliga a instalar y cargar un paquete que puede cambiar de una versión a otra. Con R base tienes código que funcionará igual dentro de diez años en cualquier ordenador.