2 votes

Comment puis-je convertir une liste de chaînes de caractères en caractères uniques ?

J'ai une variable qui est une liste de différents cris d'oiseaux en séquence. Je voudrais donner à chaque cri un caractère unique. J'ai trouvé un moyen de leur donner des numéros uniques, mais une fois que j'ai atteint 10, ce n'est plus bon car je devrais alors transformer cette liste en une chaîne de lettres et/ou de chiffres.

Par exemple, certains de mes cadres de données ressemblent à ceci :

> d1
  Order        Type
1     1 Bowerbird a
2     2     Catbird
3     3       Robin
4     4   Scrubwren
5     5 Bowerbird b
6     6  Kookaburra
7     7     Catbird
8     8     Rosella

Je voudrais convertir chaque appel unique en un personnage différent. Il peut s'agir de lettres minuscules, de lettres majuscules ou de chiffres, à condition qu'ils soient tous à un seul chiffre. Par exemple :

> d1
  Order        Type Unique
1     1 Bowerbird a      a
2     2     Catbird      b
3     3       Robin      c
4     4   Scrubwren      1
5     5 Bowerbird b      2
6     6  Kookaburra      A
7     7     Catbird      b
8     8     Rosella      B

Cette séquence d'appels pourrait alors être écrite comme "abc12AbB".

J'ai environ 40 appels différents possibles et je ne veux pas utiliser la fonction ifelse si je peux l'éviter. Existe-t-il un moyen de convertir chaque chaîne de caractères en un caractère unique ?

4voto

Ronak Shah Points 24715

Nous pouvons utiliser les alphabets majuscules et minuscules avec les chiffres 0-9, ce qui donne une taille de 62.

set.seed(123)
df$unique <- sample(c(letters, LETTERS, 0:9))[factor(df$Type)]

df
#  Order       Type unique
#1     1 Bowerbirda      E
#2     2    Catbird      Y
#3     3      Robin      c
#4     4  Scrubwren      X
#5     5 Bowerbirdb      o
#6     6 Kookaburra      n
#7     7    Catbird      Y
#8     8    Rosella      P

Vous n'avez pas vraiment besoin sample ici mais en l'ajoutant pour introduire du hasard.

Vous pouvez écrire une séquence d'appels comme

paste0(df$unique, collapse = "")
#[1] "EYcXonYP"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X