data.table
Kolommen toevoegen en wijzigen
Zoeken…
Opmerkingen
Het officiële vignet, "Reference semantics" , is de beste inleiding tot dit onderwerp.
Een herinnering: DT[where, select|update|do, by]
syntaxis wordt gebruikt om te werken met kolommen van een data.table.
- Het "waar" gedeelte is het
i
argument - Het gedeelte "select | update | do" is het argument
j
Deze twee argumenten worden meestal op positie doorgegeven in plaats van op naam.
Alle wijzigingen aan kolommen kunnen worden gedaan in j
. Bovendien is de set
functie beschikbaar voor dit gebruik.
Waarden bewerken
# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)
Een kolom bewerken
Gebruik de :=
operator in j
om nieuwe kolommen te maken of bestaande te wijzigen:
DT[, mpg_sq := mpg^2]
Bewerken op een subset van rijen
Gebruik het i
argument om subreeksen te plaatsen in rijen "waar" moet worden bewerkt:
DT[1:3, newvar := "Hello"]
Net als in een data.frame kunnen we subset gebruiken met behulp van rijnummers of logische tests. Het is ook mogelijk om [een "join" in i
bij het wijzigen] [need_a_link].
Een kolom verwijderen
Verwijder kolommen door NULL
:
DT[, mpg_sq := NULL]
Merk op dat we niet <-
het resultaat toewijzen, omdat DT
is gewijzigd.
Meerdere kolommen bewerken
Voeg meerdere kolommen toe met behulp van de :=
operator's multivariate indeling:
DT[, `:=`(mpg_sq = mpg^2, wt_sqrt = sqrt(wt))]
# or
DT[, c("mpg_sq", "wt_sqrt") := .(mpg^2, sqrt(wt))]
De .()
Syntaxis wordt gebruikt wanneer de rechterkant van LHS := RHS
een lijst met kolommen is.
Meerdere opeenvolgend afhankelijke kolommen bewerken
Als de kolommen afhankelijk zijn en in volgorde moeten worden gedefinieerd, zijn enkele manieren om dat te doen:
DT[, c("mpg_sq", "mpg2_hp") := .(temp1 <- mpg^2, temp1/hp)]
# or
DT[, c("mpg_sq", "mpg2_hp") := {temp1 = mpg^2; .(temp1, temp1/hp)}]
Kolommen bewerken op basis van dynamisch bepaalde namen
Gebruik voor dynamisch bepaalde kolomnamen haakjes:
vn = "mpg_sq"
DT[, (vn) := mpg^2]
set
Kolommen kunnen ook worden aangepast met een set
voor een kleine vermindering van overhead, hoewel dit zelden nodig is:
set(DT, j = "hp_over_wt", v = mtcars$hp/mtcars$wt)
Kolommen opnieuw ordenen
# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)
Gebruik setcolorder
om de volgorde van kolommen te setcolorder
. Bijvoorbeeld om ze om te keren
setcolorder(DT, rev(names(DT)))
Dit kost bijna niets qua prestaties, omdat het alleen de lijst met kolomaanwijzers in de data.table permuteert.
Kolommen hernoemen
# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)
Om een kolom te hernoemen (terwijl de gegevens hetzelfde blijven), is het niet nodig om de gegevens naar een kolom met een nieuwe naam te kopiëren en de oude te verwijderen. In plaats daarvan kunnen we gebruiken
setnames(DT, "mpg_sq", "mpq_squared")
om de originele kolom te wijzigen door middel van verwijzing.
Aanpassen van factor niveaus en andere kolom attributen
# example data
DT = data.table(iris)
Gebruik setattr
om setattr
van referentie te wijzigen:
setattr(DT$Species, "levels", c("set", "ver", "vir")
# or
DT[, setattr(Species, "levels", c("set", "ver", "vir"))]
De tweede optie kan het resultaat op het scherm afdrukken.
Met setattr
vermijden we de kopie die meestal wordt gemaakt bij het uitvoeren van levels(x) <- lvls
, maar het zal ook enkele controles overslaan, dus het is belangrijk om een geldige vector van niveaus toe te wijzen.