Convertir dataframe a data.table en R

En este artículo, discutiremos cómo convertir dataframe a data.table en lenguaje de programación R. data.table es un paquete R que proporciona una versión mejorada de dataframe. Características de la tabla de datos: 

  • data.table no establece ni usa nombres de fila
  • los números de fila se imprimen con un : para una mejor legibilidad
  • A diferencia de los marcos de datos, las columnas de tipo de carácter nunca se convierten en factores de forma predeterminada en data.table.

Método 1: Usando el método setDT()

Si bien los marcos de datos están disponibles con los paquetes básicos de R, el objeto data.table es parte del paquete data.table, que debe instalarse en el espacio de trabajo. El método setDT() se puede usar para forzar el marco de datos o las listas en data.table, donde se realiza la conversión al marco de datos original. La modificación se realiza por referencia a la estructura de datos original. 

Sintaxis: setDT(x)

Argumentos: 

  • x : una lista con nombre o sin nombre, data.frame o data.table.

Ejemplo 1:

R

# using the required library
library(data.table)
  
# 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)
  
# converting into data.table
setDT(data_frame)
print ("Resultant DataFrame")
print (data_frame)

Producción

[1] "Original DataFrame"
> print (data_frame)
    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"
> print (data_frame)
     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

Todos los valores faltantes y NA almacenados en un marco de datos también se conservan en data.table. Los nombres de fila se reasignan a identificadores que comienzan con valores enteros desde 1 hasta el número de filas en el marco de datos. La biblioteca data.table también proporciona otras funciones para verificar si el objeto R es un data.table usando is.data.table(data_frame). Devuelve verdadero si el argumento especificado es data.table; de ​​lo contrario, es falso. 

Ejemplo 2:

R

# using the required library
library(data.table)
  
# declare a dataframe
data_frame <- data.frame(col1 = c(1, NA, 4, NA, 3, NA),       
                         col2 = c("a", NA, "b", "e", "f", "G"),
                         row.names = c("row1","row2","row3",
                                       "row4","row5","row6"))
  
print ("Original DataFrame")
print (data_frame)
  
# converting into data.table
setDT(data_frame)
print ("Resultant DataFrame")
print (data_frame)
  
# checking if the dataframe is data table
print ("Check if data table")
print (is.data.table(data_frame))

Producción

[1] "Original DataFrame"
       col1 col2
row1    1    a
row2   NA <NA>
row3    4    b
row4   NA    e
row5    3    f
row6   NA    G
[1] "Resultant DataFrame"
     col1 col2
1:   1    a
2:   NA <NA>
3:   4    b
4:  NA    e
5:   3    f
6:   NA    G
[1] "Check if data table"
[1] TRUE

Explicación: el marco de datos original se almacena como un objeto data.frame y luego, utilizando el método setDT, se devuelve el mismo marco de datos con números de fila agregados al principio, con el identificador de número de fila seguido de dos puntos. Los valores que faltan, es decir, NA, se devuelven tal cual. Dado que los cambios se realizan en el marco de datos, cuando verificamos si es una tabla de datos o no usando is.data.table(), devuelve un valor lógico VERDADERO.

Método 2: Usar el método as.data.table()

El método as.data.table() se puede usar para convertir el dataframe o las listas en data.table si el objeto especificado no es originalmente un data.table y la conversión es posible. Los cambios no se realizan en el marco de datos original, por lo tanto, crea una copia del objeto base. 

Sintaxis: as.data.table(x,keep.rownames=FALSE)

Argumentos:

  • x : una lista con nombre o sin nombre, data.frame o data.table.
  • keep.rownames:  Por defecto: Falso. Para data.frames, TRUE retiene los nombres de las filas de data.frame bajo una nueva columna rn. keep.rownames = “id” nombra la columna “id” en su lugar.

Ejemplo:

R

# using the required library
library(data.table)
  
# declare a dataframe
data_frame <- data.frame(col1 = c(1, NA, 4, NA, 3, NA),       
                         col2 = c("a", NA, "b", "e", "f", "G"),
                         row.names = c("row1","row2","row3",
                                       "row4","row5","row6"))
  
print ("Original DataFrame")
print (data_frame)
  
# converting into data.table
dt <- as.data.table(data_frame, TRUE)
print ("Resultant DataFrame")
print (dt)
print ("Check if data table")
print (is.data.table(dt))

Producción

[1] "Original DataFrame" 
> print (data_frame)      
           col1 col2 
   row1    1    a 
   row2   NA <NA> 
   row3    4    b 
   row4   NA    e 
   row5    3    f 
   row6   NA    G 
[1] "Resultant DataFrame"
       rn col1 col2 
1: row1    1    a 
2: row2   NA <NA> 
3: row3    4    b 
4: row4   NA    e 
5: row5    3    f 
6: row6   NA    G 
[1] "Check if data table" 
[1] TRUE

Explicación: el marco de datos original tiene un nombre de fila para cada una de las filas. Cuando el marco de datos se convierte en una tabla de datos, los nombres de las filas forman una columna separada «rn» y también cada fila está encabezada por un identificador de número de fila seguido de dos puntos. Sin embargo, los cambios no se realizan en el marco de datos original. Entonces, cuando aplicamos el método is.data.table() al marco de datos original, devuelve FALSO. Por el contrario, si aplicamos este método al resultado del método as.data.table(), obtenemos el valor VERDADERO.

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 *