¿Filtrar las filas de R DataFrame por múltiples condiciones con tidyverse y dplyr?

En este tutorial, aprenderemos cómo crear subconjuntos de un R DataFrame (o tibble) por múltiples condiciones. La forma más sencilla de hacer esto es usar el paquete tidyverse y su componente central dplyr.

Crear un marco de datos de ejemplo R

Primero importemos el paquete tidyverse a RStudio y creemos un R DataFrame simple que usaremos para nuestro ejemplo:

library (tidyverse) col01 <- c('West', 'South', 'East', 'West', 'South', 'East') col11 <- c (126.0, 143.0, 185.0, 159.0, 138.0, 125.0) col12 <- c (65.0, 47.0, 58.0, 68.0, 79.0, 83.0) col13 <- c (62.0, 63.0, 79.0, NA, NA, 60.0)  var_df <- data.frame (team = col01, var1 = col11, var2 = col12, var3 = col13)

Nota: aquí se explica cómo solucionar los problemas de tidyverse sin paquetes encontrados.

Veamos nuestro conjunto de datos (llamado var_df)

print(var_df)

Aquí están nuestras filas de DataFrame, tenga en cuenta que una columna contiene valores faltantes de NA.

equipo
var1var2var3
1 Oeste 126 sesenta y cinco 62
2 Sur 143 47 63
3 Este 185 58 79
4 Oeste 159 68 N / A
5 Sur 138 79 N / A
6 Este 125 83 60

Subconjunto R DataFrame filas por condiciones (AND)

Podemos definir fácilmente un conjunto complejo de condiciones y concatenarlas usando un operador booleano AND (&)

#  subset <- filter (var_df, var1 < 138 & var2 >=75) print (subset)

Esto generará lo siguiente:

  team var1 var2 var3 1 East  125   83   60

Seleccionar filas R por condiciones (con OR)

De la misma manera, podemos construir nuestra condición usando un OR booleano (|)

var_df %>% filter (var2 >=75 | is.na(var3) )

Filtrar filas con valores NA y otras condiciones

Tenga en cuenta el uso de la función is.na() (de R Base):

> var_df %>% filter (var2 >=75 | is.na(var3) )

Esto devolverá el siguiente resultado:

   team var1 var2 var3 1  West  159   68   NA 2 South  138   79   NA 3  East  125   83   60

Filas de consulta que contienen una cadena o valores vacíos

En el siguiente ejemplo, buscamos filas con celdas que coincidan con un patrón de cadena (en nuestro caso, ‘W’) o que contengan valores vacíos NA en la columna var3:

 var_df %>% filter (str_detect(team, 'W') | is.na(var3) )