data.table
Creando una tabla de datos
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.