Filtrar un marco de datos con múltiples condiciones en R

Jesse John 21 junio 2023
  1. Filtrar un marco de datos con múltiples condiciones en R
  2. Uso de operadores booleanos
  3. Orden de Precedencia en la Evaluación de Expresiones
  4. Especifique las combinaciones deseadas usando paréntesis
  5. Usar el Operador %in%
  6. Referencia
Filtrar un marco de datos con múltiples condiciones en R

Filtrar las filas de un marco de datos es un paso común en el análisis de datos. En muchos casos, necesitamos restringir las filas del resultado a aquellas que cumplen más de una condición.

Cuando se trata de condiciones tan múltiples, necesitamos combinar nuestro conocimiento de varias piezas de información para obtener los resultados deseados. Estos pertenecen a:

  1. Uso de operadores booleanos.
  2. Orden de precedencia en la valoración de las expresiones.
  3. Uso de paréntesis para especificar el orden de evaluación deseado.

Filtrar un marco de datos con múltiples condiciones en R

Para comenzar, crearemos un marco de datos de muestra para este artículo. También cargaremos el paquete dplyr para usar su función filter() para nuestras demostraciones.

Código de ejemplo:

# Create a data frame for the article.
SN = 1:7
Alph = c("M", "M", "N", "N", "K", "K", "M")
Nmbr = c(11, 22, 11, 22, 11, 22, 0)
tb = data.frame(SN, Alph, Nmbr)
tb

# Load the dplyr package.
library(dplyr)

Producción :

> tb
  SN Alph Nmbr
1  1    M   11
2  2    M   22
3  3    N   11
4  4    N   22
5  5    K   11
6  6    K   22
7  7    M    0

Uso de operadores booleanos

Usaremos operadores booleanos para combinar múltiples condiciones.

  1. El operador “Y”, &, devuelve “VERDADERO” solo cuando ambas condiciones en cualquier lado se evalúan como “VERDADERO”.
  2. El operador OR, |, devuelve VERDADERO si alguna de las condiciones de cualquier lado o incluso ambas se evalúan como VERDADERO.
  3. El operador NO, !, convierte las condiciones FALSO en VERDADERO y viceversa.

Usaremos operadores relacionales para especificar condiciones. Para comparar la igualdad, el operador es ==.

Código de ejemplo:

# Filter rows where Alph is "M" OR "N".
tb %>% filter(Alph=="M" | Alph == "N")

# Filter rows where Alph is "M" AND Nmbr == 22.
tb %>% filter(Alph=="M" & Nmbr == 22)

# Filter rows where Alph is NOT "M".
tb %>% filter(!Alph=="M")

Producción :

> # Filter rows where Alph is "M" OR "N".
> tb %>% filter(Alph=="M" | Alph == "N")
  SN Alph Nmbr
1  1    M   11
2  2    M   22
3  3    N   11
4  4    N   22
5  7    M    0

> # Filter rows where Alph is "M" AND Nmbr == 22.
> tb %>% filter(Alph=="M" & Nmbr == 22)
  SN Alph Nmbr
1  2    M   22

> # Filter rows where Alph is NOT "M".
> tb %>% filter(!Alph=="M")
  SN Alph Nmbr
1  3    N   11
2  4    N   22
3  5    K   11
4  6    K   22
  1. En el primer ejemplo, filtramos (seleccionamos) filas para las cuales Alph es M o N. Tenga en cuenta que tenemos que especificar la condición completa en ambos lados del operador OR.
  2. En el segundo ejemplo, filtramos las filas para las que Alph es M y Nmbr es 22 simultáneamente.
  3. En el tercer ejemplo, filtramos las filas para las que la columna Alph no es M.

Orden de Precedencia en la Evaluación de Expresiones

En el contexto de combinar varias condiciones, debemos tener en cuenta el siguiente orden de precedencia de los operadores.

  1. Operador NOT, !.
  2. Operador AND, &.
  3. Operador O, |.
  4. Los operandos se agrupan de izquierda a derecha, sujeto a lo anterior a menos que se anule entre paréntesis.

Código de ejemplo:

# The ! operator only applies to the Alph column.
tb %>% filter(!Alph=="M" & Nmbr==11)

# The & operator only combines its two neighbors.
tb %>% filter(Alph=="M" & Nmbr==11 | Nmbr==22)

# The | operator gets applied AFTER &.
tb %>% filter(Nmbr==11 | Nmbr==22 & Alph=="M")

Producción :

> # The ! operator only applies to the Alph column.
> tb %>% filter(!Alph=="M" & Nmbr==11)
  SN Alph Nmbr
1  3    N   11
2  5    K   11

> # The & operator only combines its two neighbors.
> tb %>% filter(Alph=="M" & Nmbr==11 | Nmbr==22)
  SN Alph Nmbr
1  1    M   11
2  2    M   22
3  4    N   22
4  6    K   22

> # The | operator gets applied AFTER &.
> tb %>% filter(Nmbr==11 | Nmbr==22 & Alph=="M")
  SN Alph Nmbr
1  1    M   11
2  2    M   22
3  3    N   11
4  5    K   11

Por el orden de precedencia, vimos que:

  1. El ! El operador se aplicó a Alph antes de que el operador & combinara las condiciones en el primer ejemplo.
  2. El operador & combinó las dos condiciones de cada lado antes de pasar el resultado al lado izquierdo del | operador.
  3. En el tercer ejemplo, el & se aplicó primero. En el lado derecho de |, tenemos el resultado de aplicar primero & a sus dos operandos.

Especifique las combinaciones deseadas usando paréntesis

Podemos usar paréntesis para agrupar múltiples condiciones para obtener el resultado deseado. Usando paréntesis, podemos controlar el orden de las operaciones (precedencia).

Usaremos los mismos ejemplos en la sección anterior pero los modificaremos usando paréntesis para obtener resultados diferentes.

Código de ejemplo:

# The ! operator now applies to the result of the & operation.
tb %>% filter(!(Alph=="M" & Nmbr==11))

# The & operator now has the result of the | operator on its right.
tb %>% filter(Alph=="M" & (Nmbr==11 | Nmbr==22))

# Now, the | operator gets applied first, and the result is passed to &.
tb %>% filter((Nmbr==11 | Nmbr==22) & Alph=="M")

Producción :

> # The ! operator now applies to the result of the & operation.
> tb %>% filter(!(Alph=="M" & Nmbr==11))
  SN Alph Nmbr
1  2    M   22
2  3    N   11
3  4    N   22
4  5    K   11
5  6    K   22
6  7    M    0

> # The & operator now has the result of the | operator on its right.
> tb %>% filter(Alph=="M" & (Nmbr==11 | Nmbr==22))
  SN Alph Nmbr
1  1    M   11
2  2    M   22

> # Now, the | operator gets applied first, and the result is passed to &.
> tb %>% filter((Nmbr==11 | Nmbr==22) & Alph=="M")
  SN Alph Nmbr
1  1    M   11
2  2    M   22

Debido a los paréntesis, ahora obtenemos resultados diferentes.

  1. En el primer ejemplo, el ! Ahora se aplica el operador después de que el operador & combinara las condiciones.

  2. En el segundo ejemplo, el | la operación se lleva a cabo primero. El resultado se pasa luego como el operando a la derecha de &.

  3. En el tercer ejemplo, una vez más, el | se lleva a cabo primero. Observe que obtenemos el mismo resultado que en el ejemplo anterior.

    Compare esto con los diferentes resultados para estos en la sección anterior.

Usar el Operador %in%

Podemos usar el operador %in% de R para filtrar filas cuyo valor de columna es cualquiera de los valores mencionados en el vector que se le pasa. Este es el equivalente a combinar múltiples condiciones en la misma columna usando el operador OR.

Código de ejemplo:

# Filter rows where Alph is M or K.
tb %>% filter(Alph %in% c("M", "K"))

Producción :

> # Filter rows where Alph is M or K.
> tb %>% filter(Alph %in% c("M", "K"))
  SN Alph Nmbr
1  1    M   11
2  2    M   22
3  5    K   11
4  6    K   22
5  7    M    0

Referencia

Consulte la sección 10.4.2 Infijos y operadores de prefijos de la definición del lenguaje R para obtener más información sobre el orden de precedencia en la evaluación de expresiones.

Autor: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.