Calcule la diferencia entre las filas del marco de datos por grupo en R

En este artículo, veremos cómo encontrar la diferencia entre las filas por grupo en el marco de datos en el lenguaje de programación R.

Método 1: Usar el paquete dplyr

El método group_by se usa para dividir y segregar la fecha en función de los grupos contenidos en las columnas específicas. La columna requerida para agrupar se especifica como un argumento de esta función. Puede contener varios nombres de columna. 

Sintaxis:

grupo_por(col1, col2, …)

A esto le sigue la aplicación del método mutate() que se utiliza para cambiar orientaciones y realizar manipulaciones en los datos. El nuevo nombre de columna se puede especificar usando el nuevo nombre de columna. La diferencia con la fila anterior se puede calcular utilizando el método lag() de esta biblioteca. Este método encuentra los valores anteriores en un vector. 

Sintaxis:

retraso (x, n = 1L, predeterminado = NA)

Parámetro: 

  • x – Un vector de valores
  • n – Número de posiciones por retrasar
  • predeterminado (Predeterminado: NA): el valor utilizado para filas inexistentes.

Se introduce una mutación en el marco de datos utilizando el retraso del valor de la columna restado de la fila particular de la columna especificada. El valor predeterminado es el primer valor de ese grupo en particular usando el primero (nombre de columna).

Ejemplo:

R

# installing required libraries
library("dplyr")
 
# creating a data frame
data_frame <- data.frame(col1 = sample(6:9, 9 , replace = TRUE),
                         col2 = letters[1:3],
                         col3 = c(1,4,5,1,NA,NA,2,NA,2))
 
print ("Original DataFrame")
print (data_frame)
 
print ("Modified DataFrame")
 
# computing difference of each group
data_frame%>%group_by(col1)%>%mutate(diff=col3-lag(
  col3,default=first(col3)))

 
Producción 

[1] "Original DataFrame" 
  col1 col2 col3 
1    6    a    1 
2    9    b    4 
3    7    c    5 
4    6    a    1 
5    6    b   NA 
6    9    c   NA 
7    6    a    2 
8    8    b   NA 
9    7    c    2 
[1] "Modified DataFrame" 
    # A tibble: 9 x 4 
  # Groups:   col1 [4]    
   col1 col2   col3  diff   
  <int> <chr> <dbl> <dbl> 
1     6 a         1     0 
2     9 b         4     0 
3     7 c         5     0 
4     6 a         1     0 
5     6 b        NA    NA 
6     9 c        NA    NA 
7     6 a         2    NA 
8     8 b        NA    NA
9     7 c         2    -3

Método 2: Usar el paquete data.table

Los métodos de indexación del marco de datos se pueden usar para calcular la diferencia de filas por grupo en R. El atributo ‘por’ es para especificar la columna por la cual agrupar los datos. Se conservan todas las filas, mientras que se agrega una nueva columna en el conjunto de columnas, utilizando la columna a tomar para calcular la diferencia de filas por grupo. La diferencia se calcula usando la fila particular de la columna especificada y restando de ella el valor anterior calculado usando el método shift(). El método de desplazamiento se utiliza para retrasar vectores o listas. 

Sintaxis: 

data_frame[ , new-col-name := reqd-col – shift(reqd-col), by = grouping-col]

La primera instancia de ese grupo en particular se reemplaza por NA en esa columna en particular. 

Ejemplo: 

R

# installing required libraries
library("data.table")
 
# creating a data frame
data_frame <- data.table(col1 = sample(6:9, 9 , replace = TRUE),
                         col2 = letters[1:3],
                         col3 = c(1,4,5,1,9,11,2,7,2))
 
print ("Original DataFrame")
print (data_frame)
 
# computing difference of each group
data_frame[ , diff := col3 - shift(col3), by = col1]
print ("Modified DataFrame")
print (data_frame)

 
Producción 

[1] "Original DataFrame" 
col1 col2 col3 
1:    8    a    1 
2:    8    b    4 
3:    7    c    5 
4:    6    a    1 
5:    6    b    9 
6:    8    c   11 
7:    8    a    2 
8:    9    b    7 
9:    7    c    2 
[1] "Modified DataFrame" 
   col1 col2 col3 diff 
1:    8    a    1   NA 
2:    8    b    4    3 
3:    7    c    5   NA 
4:    6    a    1   NA 
5:    6    b    9    8 
6:    8    c   11    7 
7:    8    a    2   -9 
8:    9    b    7   NA 
9:    7    c    2   -3

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

El método ave() en base R se usa para agrupar promedios sobre las combinaciones de niveles de factores.  

Sintaxis:

ave(x, grupo, DIVERSIÓN = media)

Parámetro: 

  • x – la columna del marco de datos requerido
  • grupo – las variables de agrupación
  • DIVERSIÓN: la función que se aplicará a cada combinación de nivel de factor.

La función aquí es calcular la diferencia de una columna particular en esa fila y la diferencia de la fila anterior con ella. La primera instancia de ese grupo en particular se reemplaza por NA en esa columna en particular.  

Ejemplo: 

R

# creating a data frame
data_frame <- data.frame(col1 = sample(6:9, 9 , replace = TRUE),
                         col2 = letters[1:3],
                         col3 = c(1,4,5,1,9,11,2,7,2))
 
print ("Original DataFrame")
print (data_frame)
 
# computing difference of each group
data_frame$diff <- ave(data_frame$col3, factor(data_frame$col1),
                       FUN=function(x) c(NA,diff(x)))
                        
print ("Modified DataFrame")
print (data_frame)

 
Producción 

[1] "Original DataFrame" 
col1 col2 col3 
1    9    a    1 
2    9    b    4 
3    6    c    5 
4    7    a    1 
5    6    b    9 
6    7    c   11
7    9    a    2 
8    9    b    7 
9    9    c    2
[1] "Modified DataFrame" 
col1 col2 col3 diff 
1    9    a    1   NA 
2    9    b    4    3 
3    6    c    5   NA 
4    7    a    1   NA 
5    6    b    9    4 
6    7    c   11   10 
7    9    a    2   -2 
8    9    b    7    5 
9    9    c    2   -5

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 *