Seleccione filas de un DataFrame basado en valores en un vector en R

En este artículo, discutiremos cómo seleccionar filas de un marco de datos en función de los valores en un vector en el lenguaje de programación R.

Método 1: usar el operador %in%

El operador %in% en R, se utiliza para identificar si un elemento pertenece a un vector o Dataframe. Se utiliza para realizar una selección de los elementos que cumplen la condición. Toma el valor y comprueba su existencia en el objeto especificado. 

Sintaxis:

valor %in% vec

Devuelve un valor booleano VERDADERO o FALSO dependiendo de si el elemento se encuentra o no. Luego se accede al elemento correspondiente desde el DataFrame. Este enfoque crea un subconjunto del DataFrame sin realizar ningún cambio en el DataFrame existente. Se puede acceder a cualquier columna en particular usando df$colname y luego compararla con el vector usando este operador de comparación. 

Ejemplo:

R

# declare a DataFrame
data_frame <- data.frame(col1 = c(1:7),col2 = LETTERS[1:7])
  
print ("Original DataFrame")
print (data_frame)
  
# declaring the vector
vec <- c('A','a','C')
  
# getting the subset DataFrame after 
# checking values if belonging to vector
sub_df <- data_frame[data_frame$col2 %in% vec,]
  
print ("Resultant DataFrame")
print (sub_df)

Producción

[1] "Original DataFrame"
 col1 col2
1    1    A
2    2    B
3    3    C
4    4    D
5    5    E
6    6    F
7    7    G
[1] "Resultant DataFrame"
 col1 col2
1    1    A
3    3    C

Método 2: usar el operador is.element

Esta es una instancia del operador de comparación que se utiliza para verificar la existencia de un elemento en un vector o un DataFrame. is.element(x, y) es idéntico a x %in% y. Devuelve un valor lógico booleano para devolver VERDADERO si se encuentra el valor, de lo contrario FALSO. 

Sintaxis:

es.elemento(val,vec)

rbind se aplica aquí para combinar dos subconjuntos de DataFrames donde, en el primer caso, se puede verificar la existencia de valores de col2 en el vector y luego los valores de col3 en el vector. Ambos sub-DataFrames se pueden combinar.

Ejemplo:

R

# declare a DataFrame
data_frame <- data.frame(
  col1 = c(1:7),col2 = LETTERS[1:7],col3 = letters[1:7])
  
print ("Original DataFrame")
print (data_frame)
  
# declaring the vector
vec <- c('a','C','D')
  
# getting the subset DataFrame after checking 
# values if belonging to vector of the 
# corresponding columns
sub_df <- rbind(data_frame[is.element(data_frame$col2, vec),],
                data_frame[is.element(data_frame$col3, vec),])
  
print ("Resultant DataFrame")
print (sub_df)

Producción

[1] "Original DataFrame"
 col1 col2 col3
1    1    A    a
2    2    B    b
3    3    C    c
4    4    D    d
5    5    E    e
6    6    F    f
7    7    G    g
[1] "Resultant DataFrame"
 col1 col2 col3
3    3    C    c
4    4    D    d
1    1    A    a

Método 3: Usar el paquete data.table

El paquete data.table en R se puede invocar explícitamente en el espacio de trabajo de R como una versión mejorada de DataFrames. El método setDT() en R se usa para convertir el DataFrame en una tabla de datos por referencia. 

Sintaxis: setDT(df, keep.rownames=FALSE, key=NULL, check.names=FALSE)

Parámetro:

  • df – Marco de datos
  • clave: el nombre de la columna o cualquier vector que deba pasarse a setkeyv.

Además, se aplica la función J(vec), que devuelve los elementos vec asignándolos al índice de la columna pasada en el argumento clave del método setDT(). Se utiliza para crear una combinación de la tabla involucrada junto con el vector de caracteres. 

Los siguientes puntos clave se notan al usar este enfoque: 

  • El marco de datos se convierte en una tabla de datos, por lo tanto, cada fila de resultados de la tabla está encabezada por un identificador de número de fila seguido de «:» .
  • El marco de datos se compara con cada valor del vector, y la fila del marco de datos de salida final se imprime de acuerdo con eso.
  • La aplicación de este enfoque puede generar ambigüedad entre los datos reales disponibles y el resultado obtenido.

Ejemplo:

R

# declare a DataFrame
# different data type have been 
# indicated for different cols
library("data.table")
  
data_frame <- data.frame(
  col1 = c(6:9), 
  col2 = c(4.5,6.7,89.0,6.2), 
  col3 = factor(letters[1:4])
)
  
print("Original DataFrame")
print (data_frame)
  
# declaring the vector 
vec <- c(4,6)
data_frame <- setDT(data_frame, key = "col1")[J(vec)]
  
print ("Modified Dataframe")
print (data_frame)

Producción

[1] "Original DataFrame"  
col1 col2 col3 
1    6  4.5    a 
2    7  6.7    b 
3    8 89.0    c 
4    9  6.2    d 
[1] "Modified Dataframe"   
   col1 col2 col3 
1:    4   NA <NA> 
2:    6  4.5    a

Método 4: Usar el paquete dplyr

El paquete dplyr proporciona una variedad de módulos y métodos para simular manipulaciones de datos. El paquete dplyr no está disponible en base R y debe incorporarse en el espacio de trabajo para usarlo como biblioteca. Un método filter() está disponible en este paquete para producir un subconjunto del DataFrame original donde las columnas permanecen sin modificar y las filas se filtran según las restricciones aplicadas. Las filas que devuelven un valor booleano TRUE para las condiciones están disponibles como resultado de la operación. Sin embargo, al igual que otras operaciones, si el método filter() produce un resultado NA, se considera que es equivalente a los valores booleanos FALSO y, por lo tanto, se elimina del DataFrame resultante. 

Sintaxis: filtro (df, FUN)

Parámetro: 

  • df – Un marco de datos,
  • DIVERSIÓN: la función definida usando las variables df, que devuelven un valor booleano al evaluar <enmascaramiento de datos>

Este método se utiliza en combinación con el operador %in% para seleccionar filas que cumplan las condiciones indicadas. 

Ejemplo:

R

# declare a DataFrame
# different data type have 
# been indicated for different 
# cols
library(dplyr)
  
data_frame <- data.frame(
  "col1" = as.character(6:9), 
  "col2" = c(4.5,6.7,89.0,6.2), 
  "col3" = factor(letters[1:4])
)
  
print("Original DataFrame")
print (data_frame)
  
# declaring the vector 
vec <- (8:11)
data_frame <- filter(data_frame, col1 %in% vec) 
  
print("Modified DataFrame")
print (data_frame)

Producción

[1] "Original DataFrame"  
   col1 col2 col3 
1    6  4.5    a 
2    7  6.7    b 
3    8 89.0    c
4    9  6.2    d 
[1] "Modified Dataframe" 
  col1 col2 col3 
1    8 89.0    c
2    9  6.2    d

Publicación traducida automáticamente

Artículo escrito por codersgram9 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 *