Buscar..


Observaciones

Un data.table es una versión mejorada de la clase data.frame desde la base R. Como tal, su atributo class() es el vector "data.table" "data.frame" y las funciones que funcionan en un data.frame también Trabajar con una tabla de datos. Hay muchas formas de crear, cargar o forzar una tabla de datos, como se ve aquí.

Coaccionar un data.frame

Para copiar un data.frame como data.table, use as.data.table o data.table :

DF = data.frame(x = letters[1:5], y = 1:5, z = (1:5) > 3)

DT <- as.data.table(DF)
# or
DT <- data.table(DF)

Esto rara vez es necesario. Una excepción es cuando se usan conjuntos de datos mtcars como mtcars , que deben copiarse ya que no se pueden modificar in situ.

Construir con data.table ()

Hay un constructor del mismo nombre:

DT <- data.table(
  x = letters[1:5], 
  y = 1:5, 
  z = (1:5) > 3
)
#    x y     z
# 1: a 1 FALSE
# 2: b 2 FALSE
# 3: c 3 FALSE
# 4: d 4  TRUE
# 5: e 5  TRUE

A diferencia de data.frame , data.table no data.table cadenas a factores por defecto:

sapply(DT, class)
#               x           y           z 
#     "character"   "integer"   "logical" 

Leer con fread ()

Podemos leer desde un archivo de texto:

dt <- fread("my_file.csv")

A diferencia de read.csv , fread leerá cadenas como cadenas, no como factores por defecto.

Vea el [tema en fread ] [need_a_link] para más ejemplos.

Modificar un data.frame con setDT ()

Para la eficiencia, data.table ofrece una forma de alterar un data.frame o lista para hacer una data.table in situ:

# example data.frame
DF = data.frame(x = letters[1:5], y = 1:5, z = (1:5) > 3)

# modification
setDT(DF)

Tenga en cuenta que no <- asignamos el resultado, ya que el objeto DF se ha modificado in situ.

Los atributos de clase del data.frame se mantendrán:

sapply(DF, class)
#         x         y         z 
#  "factor" "integer" "logical" 

Copia otra tabla de datos con copia ()

# example data
DT1 = data.table(x = letters[1:2], y = 1:2, z = (1:2) > 3)

Debido a la forma en que se manipulan las tablas de datos, DT2 <- DT1 no hará una copia. Es decir, las modificaciones posteriores a las columnas u otros atributos de DT2 también afectarán a DT1 . Cuando quieras una copia real, usa

DT2 = copy(DT1)

Para ver la diferencia, esto es lo que sucede sin una copia:

DT2 <- DT1
DT2[, w := 1:2]

DT1
#    x y     z w
# 1: a 1 FALSE 1
# 2: b 2 FALSE 2
DT2
#    x y     z w
# 1: a 1 FALSE 1
# 2: b 2 FALSE 2

Y con una copia:

DT2 <- copy(DT1)
DT2[, w := 1:2]

DT1
#    x y     z
# 1: a 1 FALSE
# 2: b 2 FALSE
DT2
#    x y     z w
# 1: a 1 FALSE 1
# 2: b 2 FALSE 2

Así que los cambios no se propagan en este último caso.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow