Recherche…


Remarques

La vignette officielle, "Sémantique de référence" , est la meilleure introduction à ce sujet.

Un rappel: la syntaxe DT[where, select|update|do, by] est utilisée pour travailler avec des colonnes d'un data.table.

  • La partie "where" est l'argument i
  • La partie "select | update | do" est l'argument j

Ces deux arguments sont généralement passés par position plutôt que par nom.

Toutes les modifications apportées aux colonnes peuvent être effectuées en j . De plus, la fonction set est disponible pour cette utilisation.

Modification des valeurs

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

Modifier une colonne

Utilisez l'opérateur := dans j pour créer de nouvelles colonnes ou modifier celles existantes:

DT[, mpg_sq := mpg^2]

Modification sur un sous-ensemble de lignes

Utilisez l'argument i pour créer un sous-ensemble des lignes "où" des modifications doivent être apportées:

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

Comme dans un data.frame, nous pouvons sous-utiliser des numéros de lignes ou des tests logiques. Il est également possible d'utiliser [une "jointure" dans i lors de la modification] [need_a_link].

Supprimer une colonne

Supprimer les colonnes en définissant la NULL sur NULL :

DT[, mpg_sq := NULL]

Notez que nous ne <- affectons pas le résultat, car DT a été modifié sur place.

Modification de plusieurs colonnes

Ajoutez plusieurs colonnes en utilisant le format multivarié de l'opérateur :=

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

La syntaxe .() Est utilisée lorsque le côté droit de LHS := RHS est une liste de colonnes.

Modification de plusieurs colonnes dépendantes de manière séquentielle

Si les colonnes sont dépendantes et doivent être définies en séquence, vous pouvez procéder de la manière suivante:

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

Modification de colonnes par noms déterminés dynamiquement

Pour les noms de colonnes déterminés dynamiquement, utilisez des parenthèses:

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

En utilisant set

Les colonnes peuvent également être modifiées en set une petite réduction du temps système, bien que cela soit rarement nécessaire:

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

Réorganisation des colonnes

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

Pour réorganiser l'ordre des colonnes, utilisez setcolorder . Par exemple, pour les inverser

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

Cela ne coûte presque rien en termes de performances, car il ne fait que permuter la liste des pointeurs de colonnes dans le fichier data.table.

Renommer des colonnes

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

Pour renommer une colonne (tout en conservant les mêmes données), il est inutile de copier les données dans une colonne sous un nouveau nom et de supprimer l’ancienne. Au lieu de cela, nous pouvons utiliser

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

modifier la colonne d'origine par référence.

Modification des niveaux de facteur et des autres attributs de colonne

# example data
DT = data.table(iris)

Pour modifier les niveaux de facteur par référence, utilisez setattr :

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

La deuxième option peut imprimer le résultat à l'écran.

Avec setattr , nous évitons la copie généralement encourue lors de l' levels(x) <- lvls , mais nous levels(x) <- lvls également certaines vérifications, il est donc important de faire attention à assigner un vecteur de niveaux valide.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow