Seleccione los N valores más altos principales por grupo en R

En este artículo, vamos a ver cómo seleccionar el N superior valor más alto por el grupo en lenguaje R.

Método 1: Usar el método Reducir

El marco de datos se puede ordenar por grupo en orden descendente de sus valores por el método de orden. Luego se accede al marco de datos correspondiente utilizando el método de indexación tomando la salida de la función de pedido en forma de índices de fila.

Sintaxis: orden (vec, decreciente = VERDADERO)

Argumentos:

  • vec: el nombre de la columna del marco de datos para organizar en orden descendente
  • decreciente: la bandera para configurar los datos en orden descendente

El método Reduce en base R también se puede usar para seleccionar las n filas más altas de cada grupo en un marco de datos. Este método toma como entrada una función f de dos argumentos y también una lista o vector vec, que se va a reducir usando la función f. La función f es el método rbind, que se utiliza para unir las filas para formar un marco de datos. El método by() en R se usa para aplicar una función a subconjuntos específicos de un marco de datos. El primer argumento de este método toma los datos y el segundo parámetro es por el cual se aplica la función y el tercer parámetro es la función. Aquí, la cabeza se usa como la función especificada usando el tercer argumento de la llamada al método. Se utiliza para especificar el grupo de n filas del marco de datos.

Sintaxis: by(df, df$nombre-col, FUN)

Argumentos:

  • df: el marco de datos para aplicar las funciones en 
  • FUN – La función a aplicar 

La aplicación de la función combinada se puede resumir de la siguiente manera:

Reduce(rbind,by())

Código:

R

# creating dataframe
data_frame <- data.frame(col1 = rep(letters[1:4], each = 5),
                         col2 = 1:20,
                         col3 = 20:39)
print("Original DataFrame")
print(data_frame)
 
# sorting the data by the column
# required in descending order
data_sorted <- data_frame[order(data_frame$col2,
                                decreasing = TRUE), ]
 
# select top 3 values from each group
data_mod <- Reduce(rbind,                               
                    by(data_sorted,
                       data_sorted["col1"],
                       head,
                       n = 3))
 
print ("Modified DataFrame")
print (data_mod)

Producción:

Método 2: Usar el paquete dplyr

El paquete dplyr en R se usa para realizar mutaciones y manipulaciones de datos en R. Es particularmente útil para trabajar con marcos de datos y tablas de datos. El paquete se puede descargar e instalar en el directorio de trabajo usando el siguiente comando:

install.packages(“dplyr”)

Hay disponible una secuencia de métodos en este paquete que se utilizan para seleccionar las n primeras filas de cada grupo en un marco de datos. Inicialmente, se invoca el método de arreglo() para organizar los datos del marco de datos en orden ascendente o descendente. El orden descendente se invoca mediante el método desc(). El nombre de columna especificado como argumento en este método se utiliza para organizar los datos.

arrange(desc(col-name))

A esto le sigue la aplicación del método group_by que toma como argumentos el conjunto de nombres de columna que se utilizan para agrupar los datos. Puede constar de una o más columnas.

group_by(col-name1, col-name2..)

Luego, el método slice() se usa para recuperar las n filas superiores del marco de datos.

slice(1:n)

La salida se devuelve en forma de tibble que contiene información completa sobre las filas devueltas. Los números de fila del marco de datos original no se conservan.

Código:

R

library("dplyr")
 
# creating dataframe
data_frame <- data.frame(col1 = rep(letters[1:4], each = 5),
                         col2 = 1:20,
                         col3 = 20:39)
print("Original DataFrame")
print(data_frame)
 
# sorting the data by the column
# required in descending order
data_mod<- data_frame %>%                                     
  arrange(desc(col2)) %>%
  group_by(col1) %>%
  slice(1:3)
print("Modified DataFrame")
print(data_mod)

Producción:

Método 3: Usar el paquete data.table

El método data.table en R se usa para realizar el almacenamiento y la manipulación de datos de una manera bien organizada. El paquete se puede descargar e instalar en el directorio de trabajo usando el siguiente comando:

install.packages(data.table)

La tabla de datos se puede reordenar por grupo en orden descendente de sus valores por el método de orden. Luego se accede al marco de datos correspondiente utilizando el método de indexación tomando la salida de la función de pedido en forma de índices de fila.

Sintaxis: orden (vec, decreciente = VERDADERO)

Argumentos:

Vec: el nombre de la columna del marco de datos para organizar en orden descendente

Decreciente: la bandera para configurar los datos en orden descendente

Luego, el marco de datos se puede convertir en una tabla de datos usando el método data.table() junto con el nombre de la columna que se usará en el método setKey(). El atributo clave contiene el nombre de la columna para agrupar los datos en la tabla de datos.

data.table(df, key = )

Ahora, la cabeza junto con el atributo .SD se puede usar para acceder a las n filas superiores de cada uno de los grupos tomados. El argumento by contiene la columna de agrupación. El método head toma como argumentos .SD y el valor entero n.

df[ , head(.SD, 3), by =]

Código:

R

library("data.table")
 
# creating dataframe
data_frame <- data.frame(col1 = rep(letters[1:4], each = 5),
                         col2 = 1:20,
                         col3 = 20:39)
print("Original DataFrame")
print(data_frame)
 
# sorting the data in descending order
 
# Top N highest values by group
data_mod <- data_frame[order(data_frame$col2, decreasing = TRUE), ] 
 
# organising the data by group
data_mod <- data.table(data_mod, key = "col1")
 
# getting top2 values
data_mod <- data_mod[ , head(.SD, 2), by = col1]
 
# printing modified dataframe                                      
print("Modified DataFrame")
print(data_mod)

Producción:

Publicación traducida automáticamente

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