J'ai les données suivantes:
dt <- data.table(col1 = rep("a",6), col2 = c(1,1,1,2,3,1))
Maintenant, je veux remplacer tous les 1 dans col2 par la valeur "bigDog". Je peux le faire en utilisant l'esprit data.frame:
dt$col2[dt$col2==1,] <- "bigDog"
Mais je me demande s'il y a une manière différente, plus "orientée data.table"?
Si vous n'aviez pas voulu changer le type de la colonne, vous feriez:
dt[col2 == 1, col2 := 123]
Avec le changement de type, vous pouvez faire:
dt[, col2 := as.character(col2)][col2 == "1", col2 := "bigDog"]
Si vous ne changez pas le type en premier, "bigDog" sera contraint à un entier, c'est-à-dire NA
. Vous obtiendrez également un tas d'avertissements à ce sujet, bien sûr.
Notez qu'en plus d'une syntaxe moins lourde, l'utilisation de :=
a l'avantage de ne pas faire de copies supplémentaires des données (comme <-
will) et se modifie à la place.