Cómo filtrar una base de datos en R

Filtra por condiciones o por índices una base de datos usando R base

Cómo filtrar una base de datos en R
Photo by Campaign Creators / Unsplash

Una de las operaciones más importantes y comunes que se hacen al usar bases de datos es filtrar. Esta es una guía básica para hacer filtros en base de datos.

La base de datos

Para comenzar es buena idea crear una base de datos de arenero para poder comprender los cambios que realizamos.

nombres <- c("Mario", "Maria", "Alicia", "Bob", "Bob")
edad <- c(34, 30, 12, 17, 25)
df

Las primeras dos líneas crean las columnas que usaremos, mientras que la tercera crea un objeto de tipo Data Frame con ambas columnas.

Nota que usé minúsculas para nombrar los vectores, pero después nombré las columnas con la primera letra en mayúscula. Esto es para que notes que la función data.frame() permite usar la sintaxis de asignación para definir los nombres de las columnas.

Podemos ver que como resultado tenemos una tabla como la siguiente

NombreEdad
Mario34
Maria30
Alicia12
Bob17
Bob25

Existen muchas razones por las que nos puede interesar filtrar la información. Por ejemplo, podríamos estar buscando algún nombre en específico, o podríamos querer saber algo sobre un grupo particular.

Digamos que queremos identificar a los mayores de edad únicamente y también queremos encontrar a aquellas personas de nombre “Bob”. Hagamos algunos filtros usando R base y dplyr.

Filtrar una base de datos usando R base

Usemos R para identificar aquellas personas de nombre “Bob”.

df[df$Nombre == "Bob",]

Esto nos arrojará una tabla como esta

NombreEdad
Bob17
Bob25

¿Viste lo que sucedió? R nos regresa todas las filas que contienen el nombre de Bob como valor. Podríamos hacerlo al contrario y solicitarle que nos regrese todas aquellas filas que no tienen Bob como nombre.

df[df$Nombre != "Bob",]

Podríamos también pedirle a R sólamente la columna de edad. Hay varias formas de hacer esto:

df[df$Nombre != "Bob","Edad"]
df[df$Nombre != "Bob",2]
df[df$Nombre != "Bob",]$Edad

Estos tres métodos regresan la columna completa como un vector. También es posible pedirle que regrese un rango particular de datos usando sus índices. Por ejemplo

df[2:4,1:2]

regresa las filas de la segunda a la cuarta y presenta las dos columnas. Si hubieran más de dos columnas, el resto no se mostrarían usando este filtro. La tabla resultante se vería entonces así

NombreEdad
Maria30
Alicia12
Bob17

Filtros condicionales

También podemos usar otras condiciones para crear nuestros filtros. Por ejemplo, imaginemos que nos interesan únicamente los mayores de edad en nuestra tabla. Podemos entonces filtrarlos usando

df[df$Edad >= 18,]

Lo cual nos regresa la tabla que contiene únicamente a Mario, María y Bob (el que tiene 25 años). Si al contrario, queremos que nos regrese a los menores de edad, símplemente tenemos que teclear

df[df$Edad < 18,]

En realidad, no hay límite para el tipo de filtros que podemos usar. Los ejemplos que te puse son muy sencillos, pero podríamos hacer filtros un poco más interesantes. Imagina que deseamos una tabla que nos muestre únicamente a las personas cuyo nombre empieza con “M”. Una posible solución a este problema podría ser

df[substr(df$Nombre, 1, 1) == "M",]

Esto nos regresa una tabla con únicamente Mario y María. Aquí, en el lado izquierdo de la comparación lógica estoy creando un vector con las primeras letras de cada nombre. Esto se convierte en un vector de falsos y verdaderos al compararlo con la letra que nos interesa. En este caso la M.



¡Genial! Te has registrado exitosamente.

¡Bienvenido de vuelta! Has iniciado sesión correctamente.

Te has suscrito correctamente a Escribe tu primer paper de Economía.

¡Éxito! Revisa tu correo electrónico para obtener el enlace mágico para iniciar sesión.

¡Éxito! Se ha actualizado la información de facturación.

No se actualizó tu información de facturación.

Sígueme en Mastodon