Ricerca…


Osservazioni

La vignetta ufficiale, "Semantica di riferimento" , è la migliore introduzione a questo argomento.

Un promemoria: DT[where, select|update|do, by] è usato per lavorare con le colonne di un data.table.

  • La parte "dove" è l'argomento i
  • La parte "select | update | do" è l'argomento j

Questi due argomenti vengono generalmente passati per posizione anziché per nome.

Tutte le modifiche alle colonne possono essere fatte in j . Inoltre, la funzione set è disponibile per questo uso.

Modifica dei valori

# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)

Modifica di una colonna

Utilizza l'operatore := all'interno di j per creare nuove colonne o modificare quelle esistenti:

DT[, mpg_sq := mpg^2]

Modifica su un sottoinsieme di righe

Utilizza l'argomento i per sottoporre a sotto le righe "dove" devono essere apportate modifiche:

DT[1:3, newvar := "Hello"]

Come in un data.frame, possiamo impostare sottoinsiemi usando numeri di riga o test logici. È anche possibile usare [un "join" in i quando si modifica] [need_a_link].

Rimozione di una colonna

Rimuovi colonne impostando su NULL :

DT[, mpg_sq := NULL]

Notare che non <- assegnare il risultato, poiché DT è stato modificato sul posto.

Modifica di più colonne

Aggiungere più colonne tramite := formato multivariata dell'operatore:

DT[, `:=`(mpg_sq = mpg^2, wt_sqrt = sqrt(wt))]
# or 
DT[, c("mpg_sq", "wt_sqrt") := .(mpg^2, sqrt(wt))]

La sintassi .() Viene utilizzata quando il lato destro di LHS := RHS è un elenco di colonne.

Modifica di più colonne dipendenti sequenzialmente

Se le colonne dipendono e devono essere definite in sequenza, alcuni modi per farlo sono:

DT[, c("mpg_sq", "mpg2_hp") := .(temp1 <- mpg^2, temp1/hp)]
# or
DT[, c("mpg_sq", "mpg2_hp") := {temp1 = mpg^2; .(temp1, temp1/hp)}]

Modifica di colonne con nomi determinati dinamicamente

Per i nomi di colonna determinati dinamicamente, utilizzare le parentesi:

vn = "mpg_sq"
DT[, (vn) := mpg^2]

Utilizzando set

Le colonne possono anche essere modificate con set per una piccola riduzione del sovraccarico, anche se questo è raramente necessario:

set(DT, j = "hp_over_wt", v = mtcars$hp/mtcars$wt)

Riordinare le colonne

# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)

Per riorganizzare l'ordine delle colonne, usa setcolorder . Ad esempio, per invertirli

setcolorder(DT, rev(names(DT)))

Questo non costa quasi nulla in termini di prestazioni, dal momento che sta solo permettendo l'elenco dei puntatori di colonna nel data.table.

Rinominare le colonne

# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)

Per rinominare una colonna (mantenendo i dati uguali), non è necessario copiare i dati in una colonna con un nuovo nome ed eliminare quello precedente. Invece, possiamo usare

setnames(DT, "mpg_sq", "mpq_squared")

per modificare la colonna originale per riferimento.

Modifica dei livelli dei fattori e altri attributi delle colonne

# example data
DT = data.table(iris)

Per modificare i livelli dei fattori per riferimento, usa setattr :

setattr(DT$Species, "levels", c("set", "ver", "vir")
# or
DT[, setattr(Species, "levels", c("set", "ver", "vir"))]

La seconda opzione potrebbe stampare il risultato sullo schermo.

Con setattr , evitiamo la copia di solito incontrata durante i levels(x) <- lvls , ma salterà anche alcuni controlli, quindi è importante fare attenzione ad assegnare un vettore valido di livelli.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow