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.
equipovar1var2var3
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) )