1
votes

Remplacez «A» par 1, «B» par 2, dans la colonne de trame de données R

Nous avons une colonne d'un dataframe avec les lettres A à Z

df$Col1  <- gsub("A","1",df$Col1)

Je veux changer ces lettres en nombres 1 à 26.

Naturellement, je pourrais faire 26 fois, mais ce n'est ni efficace ni joli.

df$Col1 <- c("B", "C", "Q", ... , "A")

Quelle serait la meilleure façon d'aborder ce problème?

r

0 commentaires

3 Réponses :


2
votes

Vous pouvez utiliser match et la constante intégrée LETTERS:

Col1 <- c("B", "C", "Q", "A")

as.character(match(Col1, LETTERS))
#> [1] "2"  "3"  "17" "1" 


1 commentaires

Merci! Un point intéressant de cette solution est que si Col1 a une valeur qui n'est pas dans LETTERS, nous obtenons un NA, car c'est la valeur par défaut dans la fonction de correspondance. Dans mon cas, j'avais des valeurs qui étaient déjà dans le bon format Col1 <- c ("B", "9", "Q", "A") J'ai donc appliqué votre solution dans une colonne différente, puis utilisé coalesce pour obtenir les remettre ensemble!



1
votes

Une autre façon de faire cela dans la base R est de créer une table de recherche.

LookUp = 1:26
names(LookUp) = LETTERS
Replacement = LookUp[Data]


0 commentaires

2
votes

Pour le plaisir:

sapply(Col1, utf8ToInt, USE.NAMES = FALSE) - 64
[1]  2  3 17  1


0 commentaires