¿Cómo filtrar el marco de datos R por múltiples condiciones?

En el lenguaje de programación R, las columnas del marco de datos pueden estar sujetas a restricciones y producir subconjuntos más pequeños. Sin embargo, mientras se aplican las condiciones, se mantienen las siguientes propiedades:

  • Las filas se consideran un subconjunto de la entrada.
  • Las filas del subconjunto aparecen en el mismo orden que el marco de datos original.
  • Las columnas permanecen sin modificar.
  • El número de grupos puede reducirse, según las condiciones.
  • Los atributos del marco de datos se conservan durante el filtro de datos.
  • Es posible que los números de fila no se conserven en la salida final

Las filas del marco de datos se pueden someter a múltiples condiciones combinándolas mediante operadores lógicos, como AND (&), OR (|). Las filas que devuelven TRUE se conservan en la salida final.

Método 1: Usar el método de indexación y la función which()

Se puede hacer referencia a cualquier columna de marco de datos en R a través de su nombre df$col-name o usando su posición de índice en el marco de datos df[col-index]. Los valores de celda de esta columna se pueden someter a restricciones, condiciones lógicas o comparativas, y luego se puede obtener un subconjunto de marcos de datos. Estas condiciones se aplican al índice de fila del marco de datos para que se devuelvan las filas satisfechas. También se pueden combinar múltiples condiciones usando el método which() en R. La función which() en R devuelve la posición del valor que satisface la condición dada.

Sintaxis: which( vec, arr.ind = F)

Parámetro: 

vec – El vector a ser sometido a condiciones.

El operador %in% se utiliza para verificar un valor en el vector especificado. 

Sintaxis:

valor %in% vec

Ejemplo:

R

# declaring a data frame
data_frame = data.frame(col1 = c("b","b","d","e","d") ,
                        col2 = c(0,2,1,4,5), 
                        col3= c(TRUE,FALSE,FALSE,TRUE, TRUE))
  
print ("Original dataframe")
print (data_frame)
  
# checking which values of col1 are 
# equivalent to b or e or the col2 
# value is greater than 4
data_frame_mod <- data_frame[which(data_frame$col1 %in% c("b","e")
                                   | data_frame$col2 > 4),]
  
print ("Modified dataframe")
print (data_frame_mod)

Producción

[1] "Original dataframe"
 col1 col2  col3
1    b    0  TRUE
2    b    2 FALSE
3    d    1 FALSE
4    e    4  TRUE
5    d    5  TRUE
[1] "Modified dataframe"
 col1 col2  col3
1    b    0  TRUE
2    b    2 FALSE
4    e    4  TRUE
5    d    5  TRUE

Las condiciones se pueden agregar juntas, sin el uso de qué método también.

Ejemplo:

R

# declaring a data frame
data_frame = data.frame(col1 = c("b","b","d","e","d") ,
                        col2 = c(0,2,1,4,5), 
                        col3= c(TRUE,FALSE,FALSE,TRUE, TRUE))
  
print ("Original dataframe")
print (data_frame)
  
# checking which values of col1 
# are equivalent to b or e
data_frame_mod <- data_frame[data_frame$col1 %in% c("b","e")
                             & data_frame$col2 > 4,]
  
print ("Modified dataframe")
print (data_frame_mod)

Producción

[1] "Original dataframe"
 col1 col2  col3
1    b    0  TRUE
2    b    2 FALSE
3    d    1 FALSE
4    e    4  TRUE
5    d    5  TRUE
[1] "Modified dataframe"
[1] col1 col2 col3
<0 rows> (or 0-length row.names)

Método 2: Usar el paquete dplyr

La biblioteca dplyr se puede instalar y cargar en el espacio de trabajo que se utiliza para realizar la manipulación de datos. La función filter() se usa para producir un subconjunto del marco de datos, conservando todas las filas que cumplen las condiciones especificadas. El método filter() en R se puede aplicar tanto a datos agrupados como no agrupados. Las expresiones incluyen operadores de comparación (==, >, >= ), operadores lógicos (&, |, !, xor()), operadores de rango (entre(), cerca()), así como verificación de valor NA con los valores de columna. . El marco de datos del subconjunto debe conservarse en una variable separada.

Sintaxis: filter(df , cond)

Parámetro:

df – El objeto del marco de datos

cond – La condición para filtrar los datos sobre

La diferencia en la aplicación de este enfoque es que no conserva los números de fila originales del marco de datos. 

Ejemplo:

R

library ("dplyr")
  
# declaring a data frame
data_frame = data.frame(col1 = c("b","b","d","e","e") , 
                        col2 = c(0,2,1,4,5), 
                        col3= c(TRUE,FALSE,FALSE,TRUE, TRUE))
  
print ("Original dataframe")
print (data_frame)
  
# checking which values of col1 are
# equivalent to b and col3 is not 
# TRUE
data_frame_mod <- filter(
  data_frame,col1 == "b" & col3!=TRUE)
  
print ("Modified dataframe")
print (data_frame_mod)

Producción

[1] "Original dataframe"
col1 col2  col3
1    b    0  TRUE
2    b    2 FALSE
3    d    1 FALSE
4    e    4  TRUE
5    d    5  TRUE
[1] "Modified dataframe"
 col1 col2  col3 
1    b    2 FALSE

Método 3: Usar el método de subconjuntos

El método subset() en base R se usa para devolver subconjuntos de vectores, arrays o marcos de datos que satisfacen las condiciones aplicadas. El método subset() se ocupa de las filas. Los números de fila se conservan mientras se aplica este método. 

Sintaxis: subconjunto (df, cond)

Argumentos:

df – El objeto del marco de datos

cond – La condición para filtrar los datos sobre

Ejemplo:

R

# declaring a data frame
data_frame = data.frame(col1 = c("b","b","d","e","d") , 
                        col2 = c(0,2,1,4,5), 
                        col3= c(TRUE,FALSE,FALSE,TRUE, TRUE))
  
print ("Original dataframe")
print (data_frame)
  
# checking which values of col1 are
# equivalent to b or col2 value is 
# greater than 4
data_frame_mod <- subset(data_frame, col1=="b" | col2 > 4)
print ("Modified dataframe")
print (data_frame_mod)

Producción

[1] "Original dataframe"
 col1 col2  col3
1    b    0  TRUE
2    b    2 FALSE
3    d    1 FALSE
4    e    4  TRUE
5    d    5  TRUE
[1] "Modified dataframe"
 col1 col2  col3
1    b    0  TRUE
2    b    2 FALSE
5    d    5  TRUE

Publicación traducida automáticamente

Artículo escrito por yippeee25 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *