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.