Cómo obtener estadísticas de resumen por grupo en R

En este artículo, aprenderemos cómo obtener estadísticas de resumen por grupo en el lenguaje de programación R.

Marco de datos de muestra en uso:

   grpBy num
1      A  20
2      A  30
3      A  40
4      B  50
5      B  50
6      C  70
7      C  80
8      C  25
9      C  35
10     D  45
11     E  55
12     E  65
13     E  75
14     E  85
15     E  95
16     E 105

Método 1: Usar tapply()

La función tapply() en R Language se usa para aplicar una función sobre un subconjunto de vectores dado por una combinación de factores. Esta función toma 3 argumentos según la sintaxis. El primer argumento es la columna de datos, el segundo argumento es la columna según la cual se agruparán los datos, en este ejemplo los datos se agrupan según las letras. El tercer argumento es una función que se aplicará a cada grupo, en este ejemplo hemos pasado la función de resumen()  ya que queremos calcular las estadísticas de resumen por grupo.

Sintaxis: tapply(df$data, df$groupBy, resumen)

Parámetros:

  • df$data: datos sobre los que se va a aplicar la función de resumen
  • df$groupBy: columna según la cual se deben agrupar los datos
  • resumen: la función de resumen se aplica a cada grupo

Ejemplo: programa R para obtener estadísticas de resumen por grupo

R

num < - c(20, 30, 40, 50, 50, 70, 80, 25,
35, 45, 55, 65, 75, 85, 95, 105)
char < - factor(
rep(LETTERS[1:5], c(3, 2, 4, 1, 6)))
df < - data.frame(grpBy=char, num=num)
tapply(df$num, df$grpBy, summary)

Producción:

$A
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
     20      25      30      30      35      40 
$B
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
     50      50      50      50      50      50 
$C
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   25.0    32.5    52.5    52.5    72.5    80.0 
$D
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
     45      45      45      45      45      45 
$E
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   55.0    67.5    80.0    80.0    92.5   105.0 

Método 2: Usar el enfoque data.table

En este enfoque, primero necesitamos importar el paquete data.table usando la función library(). Luego, convertimos data.frame en data.table , data.table en R es una versión mejorada de data.frame. Debido a su velocidad de ejecución y la menor cantidad de código para escribir, se hizo popular en R. Luego, el paso más importante, seguimos la sintaxis proporcionada y calculamos las estadísticas de resumen de cada grupo.

Sintaxis:

establecerDT(df)

df[, as.list(resumen(num)), by = grpBy]

Parámetros:

  • df: objeto de marco de datos
  • núm: columna de datos
  • grpBy: columna según la cual se va a realizar la agrupación
  • resumen(): función aplicada en cada grupo

Ejemplo: programa R para obtener estadísticas de resumen por grupo

R

library(data.table)num < - c(20, 30, 40, 50, 50, 70, 80, 25,
35, 45, 55, 65, 75, 85, 95, 105)
char < - factor(
rep(LETTERS[1:5], c(3, 2, 4, 1, 6)))
df < - data.frame(grpBy=char, num=num)
setDT(df)
df[, as.list(summary(num)), by = grpBy]

Producción:

   grpBy Min. 1st Qu. Median Mean 3rd Qu. Max.
1:     A   20    25.0   30.0 30.0    35.0   40
2:     B   50    50.0   50.0 50.0    50.0   50
3:     C   25    32.5   52.5 52.5    72.5   80
4:     D   45    45.0   45.0 45.0    45.0   45
5:     E   55    67.5   80.0 80.0    92.5  105

Método 3: Usar la función split() y el paquete purrr

La función split() en R Language se usa para dividir un vector de datos en grupos según lo definido por el factor proporcionado. Importamos la biblioteca purrr usando la función library() .purrr es un conjunto de herramientas de programación funcional. Que viene con muchas funciones útiles, como un mapa. La función map() itera en todos los grupos y devuelve el resultado como una lista. Nos permite reemplazar for loop dentro del código y lo hace más fácil de leer.

Sintaxis: df %>% split(.$grpBy) %>% mapa(resumen)

Parámetros:

df: objeto de marco de datos

grpBy: columna del marco de datos según la cual se debe agrupar

Ejemplo: programa R para obtener estadísticas de resumen por grupo

R

library(purrr)num < - c(20, 30, 40, 50, 50, 70, 80, 25,
35, 45, 55, 65, 75, 85, 95, 105)
char < - factor(rep(LETTERS[1:5], c(3, 2, 4, 1, 6)))
df < - data.frame(grpBy=char, num=num)
df % > % split(.$grpBy) % > % map(summary)

Producción:

$A
 grpBy      num    
 A:3   Min.   :20  
 B:0   1st Qu.:25  
 C:0   Median :30  
 D:0   Mean   :30  
 E:0   3rd Qu.:35  
       Max.   :40  
$B
 grpBy      num    
 A:0   Min.   :50  
 B:2   1st Qu.:50  
 C:0   Median :50  
 D:0   Mean   :50  
 E:0   3rd Qu.:50  
       Max.   :50  
$C
 grpBy      num      
 A:0   Min.   :25.0  
 B:0   1st Qu.:32.5  
 C:4   Median :52.5  
 D:0   Mean   :52.5  
 E:0   3rd Qu.:72.5  
       Max.   :80.0  
$D
 grpBy      num    
 A:0   Min.   :45  
 B:0   1st Qu.:45  
 C:0   Median :45  
 D:1   Mean   :45  
 E:0   3rd Qu.:45  
       Max.   :45  
$E
 grpBy      num       
 A:0   Min.   : 55.0  
 B:0   1st Qu.: 67.5  
 C:0   Median : 80.0  
 D:0   Mean   : 80.0  
 E:6   3rd Qu.: 92.5  
       Max.   :105.0  

Método 4: Usar dplyr

La función group_by se utiliza para agrupar por variable proporcionada. Luego, la función de resumen se usa para calcular min, q1, mediana, media, q3, max en los datos agrupados. Estos valores estadísticos son los mismos valores producidos por la función de resumen . La única diferencia es que aquí tenemos que llamar explícitamente a esas funciones sobre los datos agrupados usando la función de resumen . Esta función reduce una columna agrupada a un solo valor según la función especificada.

Sintaxis: 

gl %>%                            

 group_by(grpBy) %>%

 resume(min = min(num), q1 = cuantil(num, 0.25), mediana = mediana(num), media = media(num), q3 = cuantil(num, 0.75), max = max(num))

Parámetros: 

df: objeto de marco de datos 

grpBy: columna según la cual se va a realizar la agrupación

Ejemplo: programa R para obtener estadísticas de resumen por grupo

R

library(dplyr)num < - c(20, 30, 40, 50, 50, 70, 80, 25,
35, 45, 55, 65, 75, 85, 95, 105)
char < - factor(
rep(LETTERS[1:5], c(3, 2, 4, 1, 6)))
df < - data.frame(grpBy=char, num=num)
df % >%group_by(grpBy) % >%summarize(min=min(num),q1=quantile(num, 0.25),median=median(num),mean=mean(num),q3=quantile(num, 0.75),max=max(num))

Producción:

  grpBy   min    q1 median  mean    q3   max
  <fct> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl>
1 A        20  25     30    30    35      40
2 B        50  50     50    50    50      50
3 C        25  32.5   52.5  52.5  72.5    80
4 D        45  45     45    45    45      45
5 E        55  67.5   80    80    92.5   105

Publicación traducida automáticamente

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