data.table
Ajout et modification de colonnes
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.