R Language Aggiunta e modifica di colonne


Esempio

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.

I nostri dati di esempio qui sotto sono

mtcars = data.table(mtcars, keep.rownames = TRUE)

Modifica di intere colonne

Usa l'operatore := all'interno di j per assegnare nuove colonne:

mtcars[, mpg_sq := mpg^2]

Rimuovi colonne impostando su NULL :

mtcars[, mpg_sq := NULL]

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

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

Se le colonne dipendono e devono essere definite in sequenza, un modo è:

mtcars[, c("mpg_sq", "mpg2_hp") := .(temp1 <- mpg^2, temp1/hp)]

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

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

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

Le colonne possono anche essere modificate con set , anche se questo è raramente necessario:

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

Modifica di sottoinsiemi di colonne

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

mtcars[1:3, newvar := "Hello"]
# or
set(mtcars, j = "newvar", i = 1:3, v = "Hello")  

Come in un data.frame, possiamo impostare sottoinsiemi usando numeri di riga o test logici. È anche possibile usare un "join" in i , ma quell'attività più complicata è trattata in un altro esempio.

Modifica degli attributi della colonna

Le funzioni che modificano gli attributi, come i levels<- oi names<- , in realtà sostituiscono un oggetto con una copia modificata. Anche se usato solo su una colonna in un data.table, l'intero oggetto viene copiato e sostituito.

Per modificare un oggetto senza copie, utilizzare setnames per modificare i nomi delle colonne di data.table o data.frame e setattr per modificare un attributo per qualsiasi oggetto.

# Print a message to the console whenever the data.table is copied
tracemem(mtcars)
mtcars[, cyl2 := factor(cyl)]

# Neither of these statements copy the data.table
setnames(mtcars, old = "cyl2", new = "cyl_fac")
setattr(mtcars$cyl_fac, "levels", c("four", "six", "eight"))

# Each of these statements copies the data.table
names(mtcars)[names(mtcars) == "cyl_fac"] <- "cf"
levels(mtcars$cf) <- c("IV", "VI", "VIII")

Essere consapevoli del fatto che queste modifiche sono fatte per riferimento, quindi sono globali . La loro modifica in un ambiente influisce sull'oggetto in tutti gli ambienti.

# This function also changes the levels in the global environment
edit_levels <- function(x) setattr(x, "levels", c("low", "med", "high"))
edit_levels(mtcars$cyl_factor)