Filtrar columnas DataFrame en R por condición dada

En este artículo, veremos cómo seleccionar columnas DataFrame en el lenguaje de programación R según una condición dada. Las columnas del marco de datos R 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 del marco de datos permanecen sin modificar.
  • Los atributos del marco de datos se conservan.
  • Las columnas de salida son un subconjunto de las columnas de entrada,

Método 1: usar métodos de indexación

Los métodos agregados se pueden aplicar sobre las columnas del marco de datos, y las columnas que satisfacen la evaluación de expresiones se devuelven como salida. El marco de datos resultante es un subconjunto del marco de datos donde se conservan todas las filas para las columnas seleccionadas. El marco de datos modificado debe almacenarse en una nueva variable para retener los cambios. Por ejemplo, colSums() se usa para calcular la suma de todos los elementos que pertenecen a una columna. 

Ejemplo 1: El siguiente programa devuelve las columnas donde la suma de sus elementos es mayor que 10: 

R

# declaring a data frame
data_frame = data.frame(col1 = c(0 : 4) ,
                        col2 = c(0, 2, -1, 4, 8),
                        col3 = c(9 : 13))
 
print ("Original dataframe")
print (data_frame)
 
# where column sum is greater than 10
data_frame_mod <- data_frame[colSums(data_frame)>10]
print ("Modified dataframe")
print (data_frame_mod)

Producción:

[1] "Original dataframe"
 col1 col2 col3
1    0    0    9
2    1    2   10
3    2   -1   11
4    3    4   12
5    4    8   13
[1] "Modified dataframe"
 col2 col3
1    0    9
2    2   10
3   -1   11
4    4   12
5    8   13

Ejemplo 2: El siguiente programa verifica si la operación de módulo del valor col1 con 2 no es igual a 0. 

R

# declaring a data frame
data_frame = data.frame(col1 = c(0 : 4) ,
                        col2 = c(0, 2, -1, 4, 8),
                        col3 = c(9 : 13))
 
print ("Original dataframe")
print (data_frame)
 
# where column sum is greater than 10
data_frame_mod <- data_frame[data_frame$col1 %% 2 != 0, ]
print ("Modified dataframe")
print (data_frame_mod)

Producción:

[1] "Original dataframe"
 col1 col2 col3
1    0    0    9
2    1    2   10
3    2   -1   11
4    3    4   12
5    4    8   13
[1] "Modified dataframe"
 col1 col2 col3
2    1    2   10
4    3    4   12

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.

install.packages("dplyr")

La función select_if() se usa para producir un subconjunto del marco de datos, conservando todas las filas que cumplen las condiciones especificadas. El método select_if() 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. 

df %>% select_if(condition)

Ejemplo 1: el siguiente programa devuelve las columnas numéricas del marco de datos, cuando se somete al método select_if():

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)
                        col4 = c(1 : 5))
 
print ("Original dataframe")
print (data_frame)
print ("Modified dataframe")
 
# selecting numeric columns
data_frame %>% select_if(is.numeric)

Producción

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

Ejemplo 2: El siguiente programa devuelve las columnas donde la suma de sus elementos es menor que 10: 

R

library ("dplyr")
 
# declaring a data frame
data_frame = data.frame(col1 = c(-1, -2, -2, 0, 0) ,
                        col2 = c(0, 2, 1, 4, 5),
                        col3 = c(1 : 5))
print ("Original dataframe")
print (data_frame)
print ("Modified dataframe")
 
# select columns where column sum is less than 10
data_frame %>% select_if(colSums(data_frame) < 10)

Producción:

[1] "Original dataframe" 
  col1 col2 col3 
1   -1    0    1 
2   -2    2    2 
3   -2    1    3 
4    0    4    4 
5    0    5    5  
[1] "Modified dataframe" 
  col1
1   -1 
2   -2 
3   -2 
4    0 
5    0

Método 3: Usar el método subconjunto()

El método subset() se puede usar para devolver un conjunto de filas que satisfagan las restricciones especificadas. El método subset() no modifica el orden de aparición de las filas. 

Sintaxis: subconjunto ( df , condición)

Argumentos: 

  • df – El marco de datos
  • condition – Las restricciones que se aplicarán

El operador %in% se puede utilizar para comprobar si el valor se produce en un vector de valores. Devuelve un valor booleano dependiendo de si el elemento existe o no.

val %in% vector

R

# declaring a data frame
data_frame = data.frame(col1 = c(0 : 4) ,
                        col2 = c(0, 2, -1, 4, 8),
                        col3 = c(9 : 13))
print ("Original dataframe")
print (data_frame)
 
# where column sum is greater than 10
data_frame_mod <- subset(data_frame,
                         col3 %in% c(9, 10, 13))
print ("Modified dataframe")
print (data_frame_mod)

Producción:

[1] "Original dataframe"
 col1 col2 col3
1    0    0    9
2    1    2   10
3    2   -1   11
4    3    4   12
5    4    8   13
[1] "Modified dataframe"
 col1 col2 col3
1    0    0    9
2    1    2   10
5    4    8   13

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 *