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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow