Search
Les fonctions sur les caractères

Les actuaires doivent souvent travailler avec des bases de données qui contiennent des variables de type caractère. Il arrive qu'on veuille modifier le texte ou en extraire une partie. Dans cette section, nous verrons les fonctions les plus utilisées qui nous facilitent la tâche.

mais d'abord, créons quelques objets de type text:

un_bonjour <- "Bonjour"
salutations <- c("Bonjour", "Hi", "hey", "Salam")
mot <- "world"
question <- "Quel est le language de programmation préféré des actuaires?"
reponse <- "Rrrrrrrr"
un_bonjour<-"Bonjour"
salutations<-c("Bonjour","Hi","Hey","Salam")
mot<-"World"

question<-"Quel est le langage de programmation préféré des actuaires?"
réponse<-"Rrrrrrrrrr"

substr()

La fonction substr(x, start, stop) nous sert souvent lorsqu'on veut extraire une partie d'une chaîne de caractères.

Par exemple, appliquons une extraction du premier mot Quel, ce dernier commence à l'index #1 et termine à l'index #4

question
'Quel est le language de programmation préféré des actuaires?'
substr(question, 13, 20)
'language'
substr(question, 1, 4)
'Quel'

pour le mot langage;

substr(question, 13, 19)
'langage'

nchar()

Dans un plus long texte, nous ignorons la longueur du texte. Si l'on veut compter le nombre de caractères à l'intérieur d'une chaine de caractères, on utilise alors nchar

nchar(question
60

On s'en sert souvent lorsqu'on ne veut pas fixer l'argument maximum de la fonction;

substr(question, nchar(question)-9, nchar(question))
'actuaires?'

Si l'on applique cette fonction sur un vecteur, nous obtenons bien sûr un vecteur comme résultat

substr(salutations, nchar(salutations)-2, nchar(salutations))
  1. 'our'
  2. 'Hi'
  3. 'Hey'
  4. 'lam'

Paste

Lorsqu'on veut concaténer des chaines de caractères, on utilise alors la fonction paste. Passons nos salutations au monde!

paste(salutations, mot)
  1. 'Bonjour World'
  2. 'Hi World'
  3. 'Hey World'
  4. 'Salam World'

L'argument sep nous spécifie quel caractère nous utilisons afin de séperer ce qu'on veut concatener;

paste(salutations, mot, sep=" -_- ")
  1. 'Bonjour -_- World'
  2. 'Hi -_- World'
  3. 'Hey -_- World'
  4. 'Salam -_- World'

Par défaut le séparateur est un espace. Si l’on voulait enlever l'espace, il faudrait alors le spécifier dans l'argument sep=''

paste(salutations, mot, sep="")
  1. 'BonjourWorld'
  2. 'HiWorld'
  3. 'HeyWorld'
  4. 'SalamWorld'

Bien sûr, nous ne sommes pas limités à concaténer seulement deux mots, on peut ajouter directement d'autres caractères

paste(salutations, mot, "!", sep=", ")
  1. 'Bonjour, World, !'
  2. 'Hi, World, !'
  3. 'Hey, World, !'
  4. 'Salam, World, !'
paste(salutations, ", ",mot, "!", sep="")
  1. 'Bonjour, World!'
  2. 'Hi, World!'
  3. 'Hey, World!'
  4. 'Salam, World!'

Autre exemple qu'on pourrait souvent utiliser lorsqu'on veut nommer des colonnes dans une matrice ou un data frame. Par exemple, nous avons 10 colonnes qu'on voudrait appeler cout_1 à cout_10

paste("cout_", 1:10, sep="")
  1. 'cout_1'
  2. 'cout_2'
  3. 'cout_3'
  4. 'cout_4'
  5. 'cout_5'
  6. 'cout_6'
  7. 'cout_7'
  8. 'cout_8'
  9. 'cout_9'
  10. 'cout_10'

grep

Une fonction très utile lorsqu'on cherche l'index d'un élément à l'intérieur d'un vecteur d'éléments constitués de chaînes de caractères. Dans l'exemple suivant, nous cherchons l'index de l’occurrence de la lettre . Autrement dit, on demande de nous donner à quels numéros de l'élément, un caractère donné apparaît.

grep("H", salutations)
  1. 2
  2. 3

Ça nous dit que le 1er ainsi que le 3e élément contienent les lettre H

Si l'on veut extraire ces éléments, nous ajoutons alors l'argument value=TRUE

grep("H", salutations, value=TRUE)
  1. 'Hi'
  2. 'Hey'

On se rappelle que R contient une base de données qui contient l'information géographique de tous les états du pays de l'oncle Sam. Dans un autre exemple, cherchons les noms de ces états avec le mot NEW dedans.

grep("New", state.name, value=TRUE)
  1. 'New Hampshire'
  2. 'New Jersey'
  3. 'New Mexico'
  4. 'New York'

strsplit

Cette fonction permet de séparer les chaines de caractères par un argument donné.

strsplit(question, " ")
    1. 'Quel'
    2. 'est'
    3. 'le'
    4. 'langage'
    5. 'de'
    6. 'programmation'
    7. 'préféré'
    8. 'des'
    9. 'actuaires?'

sub

Lorsqu'on veut un caractère ou une chaine de caractères à l'intérieur d'une autre chaine de caractère, nous utilisons alors la fonction sub

sub("actuaires", "geeks", question)
'Quel est le langage de programmation préféré des geeks?'

La fonction sub remplace seulement la première occurrence.

gsub

La fonction gsub remplace un caractère donné à toutes les occurrences;

sub(" ", "-", question)
'Quel-est le langage de programmation préféré des actuaires?'
gsub(" ", "-", question)
'Quel-est-le-langage-de-programmation-préféré-des-actuaires?'