library(stringr)
Exercices#
no 1#
Créer n’importe quuel fichier sur votre répertoire de travail et vérifier s’il existe.
Note ce numéros sert juste à pratiquer file.create
et file.exists
.
file.create("vide.txt")
file.exists("vide.txt")
file.exists("vide.csv")
no 2#
Créez une variable qui représente votre date de naissance appelée date_naiss.
date_naiss<-ymd('1990-10-16')
date_naiss
Error in ymd("1990-10-16"): could not find function "ymd"
Traceback:
Quelle est la date d’aujourd’hui?
auj=Sys.Date()
auj
Quelle jour de semaine vous êtes né?
weekdays(date_naiss)
Affichez le résultat en espagnole
Sys.setlocale(locale="es_ES.UTF-8")
weekdays(date_naiss)
Remettre votre ordi en Français
Sys.setlocale(locale="fr_FR.UTF-8")
no 3#
Afin de remercier vos collègues de travail de leur présence à votre première formation que vous avez donné, vous décidez de leur envoyer un message de remerciemenets. Toutefois, vous voulez ajouter votre touche personnelle en écrivant un émail à chaucun de vos collègues. en mentionnant leur prénoms à l’entête de du message.
Votre message ressmble à ceci:
Chèr "prénom",
Un petit mot pour vous dire merci. Merci d’avoir contribué à la réussite de ma première présentation.
À bientôt!
Toutefois, vous vous rendez compte qu’il faut accorder le mot « chèr » au masculin ou au féminin selon le sexe de votre collègue. Vous ne voulez certainement pas perdre votre temps à le faire manuellement, alors vous confiez la tâche à votre bel ordinateur qui comprends bien le langage R
!
a<-read.csv("https://raw.githubusercontent.com/nmeraihi/data/master/coll%C3%A8gues.csv")
tail(a)
birthdate | PrenomNom | sex | |
---|---|---|---|
66 | 1983-08-04 | Sabine Lejeune | F |
67 | 1995-05-24 | Timothée Marchand | M |
68 | 1990-06-05 | Sylvie Roux-Delattre | F |
69 | 1985-02-14 | Patrick-Daniel Barre | M |
70 | 1981-02-20 | Laurent Lacombe-Lecomte | M |
71 | 1990-03-08 | Marcel David | M |
library(stringr)
a$prenom<- str_split_fixed(a$PrenomNom, " ", 2)[,1]
a$nom<- str_split_fixed(a$PrenomNom, " ", 2)[,2]
head(a)
birthdate | PrenomNom | sex | prenom | nom |
---|---|---|---|---|
1985-07-02 | Anaïs-Adrienne Launay | F | Anaïs-Adrienne | Launay |
1994-11-11 | Benjamin Delmas de la Gros | M | Benjamin | Delmas de la Gros |
1991-03-20 | Laurence Lucas | F | Laurence | Lucas |
1993-12-01 | Philippine Laurent | F | Philippine | Laurent |
1984-03-22 | Louise Paris | F | Louise | Paris |
1976-07-29 | André Joly | M | André | Joly |
a$forme_mas_fem<-ifelse(a$sex=="F", paste("Chère", a$prenom, ","), paste("Chèr", a$prenom, ",", sep = " "))
a$message<-paste(a$forme,
"Un petit mot pour vous dire merci. Merci d’avoir contribué à la réussite de ma première présentation.",
"À bientôt!",sep="\n")
print(head(a$message))
[1] "Chère Anaïs-Adrienne ,\nUn petit mot pour vous dire merci. Merci d’avoir contribué à la réussite de ma première présentation.\nÀ bientôt!"
[2] "Chèr Benjamin ,\nUn petit mot pour vous dire merci. Merci d’avoir contribué à la réussite de ma première présentation.\nÀ bientôt!"
[3] "Chère Laurence ,\nUn petit mot pour vous dire merci. Merci d’avoir contribué à la réussite de ma première présentation.\nÀ bientôt!"
[4] "Chère Philippine ,\nUn petit mot pour vous dire merci. Merci d’avoir contribué à la réussite de ma première présentation.\nÀ bientôt!"
[5] "Chère Louise ,\nUn petit mot pour vous dire merci. Merci d’avoir contribué à la réussite de ma première présentation.\nÀ bientôt!"
[6] "Chèr André ,\nUn petit mot pour vous dire merci. Merci d’avoir contribué à la réussite de ma première présentation.\nÀ bientôt!"
Lorsqu’on affiche le message qui doit être envoyé à chaque collègue, on remarque:
Les charactères
\n
permettent de créer un saut de ligne dans le paragraphe lorsque ce dernier est écrirt dans un fichier.txt
On remarque aussi que nous nous adresson bien à nos collègues féminis par
Chère
(Chère Anaïs-Adrienne) alors que les collègues masculins parChèr
(Chèr André).
no 4#
À partir du fichier csv précédent, calculez l’âge pour chaucne des lignes avec les deux méthodes décrite ci-dessous.
calculé#
Dans la plupart du temps, l’âge peut se calculer comme suit: $\( \frac{(\text{date d'aujourd'hui}) -(\text{date de naissance})}{365.25} \)$
Nous avons appris à créer des fonctions, à partir de la formule précédente, créer une fonction appelé age
qui calclule l’âge d’une personne. Cette fonction prends comme argument la date de naissance et la date courante. Par défaut, la date de naissance est 1970-01-01 et la date courante est la date d’aujourd’hui
library(lubridate)
date_naiss=ymd('1992-01-01')
date_cour=Sys.Date()
age<-function(date_naiss=ymd('1970-01-01'), date_cour=Sys.Date()){
return(as.numeric((date_cour-date_naiss)/365.25))
}
age(date_naiss, date_cour)
Améliorez notre fonction âge avec une validation que les arguments entrés sont bien des dates
D’abbord vérifions la condition;
is.Date(date_naiss) && is.Date(date_cour)
ensuite nous pouvons insérer
age<-function(date_naiss=ymd('1970-01-01'), date_cour=Sys.Date()){
if (is.Date(date_naiss) && is.Date(date_cour)){
return(as.numeric((date_cour-date_naiss)/365.25))
}
}
age(date_naiss, date_cour)
À partir des données de l’exercice précédent (no3), créez une variole appelée age_collegues qui calcule l’âge de vos collègues avec votre nouvelle fonction que vous venez de créer:
a$age_collegues<-round(age(date_cour =Sys.Date() , date_naiss = as.Date(a$birthdate)))
S’il est plus grand que vous de 3 ans et plus, vous le vouvoyez. Sinon vous ne vous gênez pas de le tutoyer. Puisque nous avons déjà le message, nous pouvons juste modifier ce message en change le vous
par tu
lorsque age_collegues-mon_age>=3
avec la fonction gsub
.
mon_age=age(date_naiss,auj)
round(mon_age,0)
a$message_poli <- ifelse(a$age_collegues-round(mon_age,0)<3,
a$message_poli <- gsub(x=a$message,pattern = "vous", replacement = "te"),
a$message_poli <- a$message)
head(a,2)
birthdate | PrenomNom | sex | prenom | nom | forme_mas_fem | message | age_birth | age_collegues | message_poli |
---|---|---|---|---|---|---|---|---|---|
1985-07-02 | Anaïs-Adrienne Launay | F | Anaïs-Adrienne | Launay | Chère Anaïs-Adrienne , | Chère Anaïs-Adrienne , Un petit mot pour vous dire merci. Merci d’avoir contribué à la réussite de ma première présentation. À bientôt! | 33 | 33 | Chère Anaïs-Adrienne , Un petit mot pour vous dire merci. Merci d’avoir contribué à la réussite de ma première présentation. À bientôt! |
1994-11-11 | Benjamin Delmas de la Gros | M | Benjamin | Delmas de la Gros | Chèr Benjamin , | Chèr Benjamin , Un petit mot pour vous dire merci. Merci d’avoir contribué à la réussite de ma première présentation. À bientôt! | 24 | 24 | Chèr Benjamin , Un petit mot pour te dire merci. Merci d’avoir contribué à la réussite de ma première présentation. À bientôt! |
Version dplyr:
library(dplyr)
a %>% mutate(message_poli = ifelse(age_collegues-round(mon_age,0)<3,
gsub(x=message,pattern = "vous", replacement = "te"),
message)) %>% head(2)
birthdate | PrenomNom | sex | prenom | nom | forme_mas_fem | message | age_birth | age_collegues | message_poli |
---|---|---|---|---|---|---|---|---|---|
1985-07-02 | Anaïs-Adrienne Launay | F | Anaïs-Adrienne | Launay | Chère Anaïs-Adrienne , | Chère Anaïs-Adrienne , Un petit mot pour vous dire merci. Merci d’avoir contribué à la réussite de ma première présentation. À bientôt! | 33 | 33 | Chère Anaïs-Adrienne , Un petit mot pour vous dire merci. Merci d’avoir contribué à la réussite de ma première présentation. À bientôt! |
1994-11-11 | Benjamin Delmas de la Gros | M | Benjamin | Delmas de la Gros | Chèr Benjamin , | Chèr Benjamin , Un petit mot pour vous dire merci. Merci d’avoir contribué à la réussite de ma première présentation. À bientôt! | 24 | 24 | Chèr Benjamin , Un petit mot pour te dire merci. Merci d’avoir contribué à la réussite de ma première présentation. À bientôt! |
Créerons tous ces messages dans des fichiers .txt
. Le nom de chaque fichier sera le nom de votre collègue et son prénom comme suit prenon_non.txt
. Tous ces fichiers se trouveront un répertoire appelé lettres
.
for (i in 1:length(a)){
nomfichier <- paste("/Users/nour/Downloads/lettres/",
paste(gsub(a$prenom[i],pattern = " ", replacement = ""),
gsub(a$nom[i],pattern = " ", replacement = "")
, sep="_")
, ".txt",sep="")
print(nomfichier)
writeLines(text=a$message_poli[i], con=nomfichier)
}
[1] "/Users/nour/Downloads/lettres/Anaïs-Adrienne_Launay.txt"
[1] "/Users/nour/Downloads/lettres/Benjamin_DelmasdelaGros.txt"
[1] "/Users/nour/Downloads/lettres/Laurence_Lucas.txt"
[1] "/Users/nour/Downloads/lettres/Philippine_Laurent.txt"
[1] "/Users/nour/Downloads/lettres/Louise_Paris.txt"
[1] "/Users/nour/Downloads/lettres/André_Joly.txt"
[1] "/Users/nour/Downloads/lettres/Léon_Gosselin.txt"
[1] "/Users/nour/Downloads/lettres/Nicolas_Normand-Fontaine.txt"
[1] "/Users/nour/Downloads/lettres/Camille_Charrier.txt"
[1] "/Users/nour/Downloads/lettres/Julien_Legrand.txt"
lubridate#
Dans le package lubridate
, il existe une fonction qui calcule l’intervale entre deux date, utilisons cette fonction pour valider le calcul de notre fonction age
que nous avons crée précédemment
a$age_lubri<-round(interval(start = as.Date(a$birthdate), end =Sys.Date() ) /
duration(num = 1, units = "years"),0)
head(a)