6.5 Filtrado
Conocer cómo filtrar correctamente una base de datos es fundamental en el manejo de bases de datos. Implica escoger del total de filas solo aquellas que cumplan con ciertos criterios lógicos.
6.5.1 Procedimiento de filtrado
Primer paso: saber qué se va a filtrar. Por ejemplo: en la base de datos DF
se desea filtrar solo aquellas filas que en la columna A tengan valores mayores iguales a 5.32.
Segundo paso: formalizar la petición en sintaxis de R, utilizando operadores lógicos y/o relacionales. Para escribir en R “todos los valores de un vector A mayor igual a 5.32”, colocamos:
>= 5.32 A
Tercer paso: incluir esta petición lógica en la función de filtrado de dplyr:
%>% filter(A >= 5.32) DF
6.5.2 Aplicaciones de filtrado
Considera la base de datos WHO_tidy.xlsx
:
<- openxlsx::read.xlsx("WHO_tidy.xlsx") WHO
Ejemplo 6.3 Filtrar únicamente las filas de la categoría Category B
columna Category
.
¿Cuál es el porcentaje de filas que tiene esta nueva base de datos respecto a la original?
# Número de filas de WHO
nrow(WHO)
# [1] 2938
# Filtrado
<- WHO %>% filter(Category == "Category B")
WHO1
# Número de filas de WHO1
nrow(WHO1)
# [1] 963
# Porcentaje de filas en WHO1 respecto a WHO
nrow(WHO1) / nrow(WHO)) * 100
(# [1] 32.78
Para incorporar más de una condición relacional, utiliza los operadores lógicos “y” &
u “o” |
.
Ejemplo 6.4 Filtrar únicamente las filas con cumplan con tener Category B
en la columna Category
y Level 1 en la columna Level
. Calcular el número de filas de la tabla:
%>%
WHO filter(Category == "Category B" & Level == "Level 1") %>%
nrow()
# [1] 309
Cuando se necesita filtrar más de un nivel para una columna, se utiliza el operador %in%
(ver sección 2.3 Operadores lógicos y relacionales). Cuando se deba filtrar todos los niveles excepto uno, es más sencillo el proceso utilizando el operador !=
.
Ejemplo 6.5 Filtrar las categorías Category A
y Category B
en la columna Category
, además de y Level 1 en la columna Level
. Calcular el número de filas de la tabla:
%>%
WHO filter(Category %in% c("Category A", "Category B") & Level == "Level 1") %>%
nrow()
# [1] 645
Como era de esperar, ahora hay más filas en la tabla filtrada.
Ejemplo 6.6 Considera adicionar una tercer condición lógica al ejemplo anterior. Esta vez, se requiere filtrar aquellas filas que con valores de expectativa de vida (columna Life_exp
) mayor a 60:
%>%
WHO filter(Category %in% c("Category A", "Category B") & Level == "Level 1" & Life_exp > 80) %>%
nrow()
# [1] 49
Ejemplo 6.7 Aprovechemos a adicionar una cuarta condición de filtrado: años (columna Year
) 2013 a 2015.
%>%
WHO filter(Category %in% c("Category A", "Category B")) %>%
filter(Level == "Level 1" & Life_exp > 80) %>%
filter(Year %in% 2013:2015) %>%
nrow()
# [1] 18