web-dev-qa-db-fra.com

Remplacement conditionnel des valeurs de colonne par data.table

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"?

35
Colonel Beauvel

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.

41
eddi