Compara filas adyacentes en R data.table

El paquete data.table se utiliza para facilitar las operaciones de manipulación de datos, como las operaciones de creación de subconjuntos, agrupación y actualización de la tabla de datos en el lenguaje de programación R. 

Los métodos de indexación se utilizan para crear una nueva columna que calcula el retraso con el valor anterior encontrado dentro del mismo grupo. El grupo se ilustra utilizando el atributo «por». La nueva columna se agrega y sus valores correspondientes se agregan mediante el método c(NA, x[-.N]), donde x es un indicador de la columna que se usará para calcular el valor de la nueva columna. La primera instancia de un valor en un grupo particular se reemplaza usando NA. 

Sintaxis:

dt[, nombre-nueva-col := c(NA, x[-.N]), by ]

Ejemplo 1: Comparación de filas adyacentes en R Data.table

R

# importing required packages
library("data.table")
  
# declaring data frame
data_frame <- data.table(col1 = sample(letters[1:4],12, replace = TRUE),
                         col2 = sample(1:6 , 12, replace = TRUE)
)
  
print ("original data frame")
print (data_frame)
  
# computing lag group by column1 
data_frame[, lag := c(NA, col2[-.N]), by = col1]
print ("modified data frame")
print (data_frame)

Producción

[1] "original data frame"
   col1 col2
1:    b    6
2:    c    5
3:    a    1
4:    d    6
5:    d    5
6:    b    6
7:    b    5
8:    a    2
9:    c    6
10:    a    3
11:    a    4
12:    d    1
[1] "modified data frame"
    col1 col2 lag
1:    b    6  NA
2:    c    5  NA
3:    a    1  NA
4:    d    6  NA
5:    d    5   6
6:    b    6   6
7:    b    5   6
8:    a    2   1
9:    c    6   5
10:    a    3   2
11:    a    4   3
12:    d    1   5

Ahora, la diferencia entre filas adyacentes se calcula usando la fórmula donde los valores de la nueva columna y la columna existente x se usan en la tabla de datos. 

Sintaxis:

data_frame[, diff-col := x – new-col-name]

Ejemplo 2: diferencia entre data.table adyacente en R

R

# importing required packages
library("data.table")
  
# declaring data frame
data_frame <- data.table(col1 = sample(letters[1:4],12, replace = TRUE),
                         col2 = sample(1:6 , 12, replace = TRUE)
)
  
print ("original data frame")
print (data_frame)
  
# computing lag group by column1 
data_frame[, lag := c(NA, col2[-.N]), by = col1]
print ("modified data frame")
print (data_frame)
  
data_mod <-data_frame[, difference := col2 - lag]
print ("modified data frame")
print (data_mod)

Producción

[1] "original data frame"
   col1 col2
1:    a    1
2:    d    3
3:    d    6
4:    d    3
5:    d    2
6:    b    4
7:    d    5
8:    c    6
9:    d    2
10:    b    4
11:    d    1
12:    a    6
[1] "modified data frame"
   col1 col2 lag difference
1:    a    1  NA         NA
2:    d    3  NA         NA
3:    d    6   3          3
4:    d    3   6         -3
5:    d    2   3         -1
6:    b    4  NA         NA
7:    d    5   2          3
8:    c    6  NA         NA
9:    d    2   5         -3
10:    b    4   4          0
11:    d    1   2         -1
12:    a    6   1          5

Ejemplo 3:

R

# importing required packages
library("data.table")
  
# declaring data frame
data_frame <- data.table(col1 = sample(letters[1:4],16, replace = TRUE),
                         col2 = 100:115
)
  
print ("original data frame")
print (data_frame)
  
# computing difference 
data_frame[, col3 := c(NA, col2[-.N]), by = col1]
  
data_mod <-data_frame[, difference := col2 - col3]
print ("modified data frame")
print (data_mod)

Producción

[1] "original data frame"
   col1 col2
1:    d  100
2:    a  101
3:    b  102
4:    a  103
5:    d  104
6:    d  105
7:    c  106
8:    a  107
9:    b  108
10:    a  109
11:    b  110
12:    d  111
13:    b  112
14:    d  113
15:    c  114
16:    b  115
[1] "modified data frame"
   col1 col2 col3 difference
1:    d  100   NA         NA
2:    a  101   NA         NA
3:    b  102   NA         NA
4:    a  103  101          2
5:    d  104  100          4
6:    d  105  104          1
7:    c  106   NA         NA
8:    a  107  103          4
9:    b  108  102          6
10:    a  109  107          2
11:    b  110  108          2
12:    d  111  105          6
13:    b  112  110          2
14:    d  113  111          2
15:    c  114  106          8
16:    b  115  112          3

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 *