data.table
Creare un data.table
Ricerca…
Osservazioni
Un data.table è una versione avanzata della classe data.frame dalla base R. Come tale, l'attributo class()
è il vettore "data.table" "data.frame"
e le funzioni che funzionano su un data.frame saranno anche funziona con un data.table. Ci sono molti modi per creare, caricare o forzare su un data.table, come visto qui.
Costruire un data.frame
Per copiare un data.frame come data.table, utilizzare 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)
Questo è raramente necessario. Un'eccezione è quando si utilizzano set di dati mtcars
come mtcars
, che devono essere copiati poiché non possono essere modificati sul posto.
Costruisci con data.table ()
C'è un costruttore con lo stesso nome:
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 differenza di data.frame
, data.table
non costringerà le stringhe ai fattori per impostazione predefinita:
sapply(DT, class)
# x y z
# "character" "integer" "logical"
Leggi con fread ()
Possiamo leggere da un file di testo:
dt <- fread("my_file.csv")
A differenza di read.csv
, fread
leggerà le stringhe come stringhe, non come fattori di default.
Vedi [argomento su fread
] [need_a_link] per altri esempi.
Modifica un data.frame con setDT ()
Per efficienza, data.table offre un modo per modificare un data.frame o un elenco per creare un data.table sul posto:
# example data.frame
DF = data.frame(x = letters[1:5], y = 1:5, z = (1:5) > 3)
# modification
setDT(DF)
Nota che non <-
assegna il risultato, poiché l'oggetto DF
è stato modificato sul posto.
Gli attributi di classe di data.frame verranno mantenuti:
sapply(DF, class)
# x y z
# "factor" "integer" "logical"
Copia un altro data.table con copy ()
# example data
DT1 = data.table(x = letters[1:2], y = 1:2, z = (1:2) > 3)
A causa del modo in cui i dati vengono manipolati, DT2 <- DT1
non farà una copia. Cioè, le successive modifiche alle colonne o altri attributi di DT2
influenzeranno anche DT1
. Quando vuoi una copia reale, usa
DT2 = copy(DT1)
Per vedere la differenza, ecco cosa succede senza 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
E 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
Quindi le modifiche non si propagano in quest'ultimo caso.