Search
3 Exercices Solutions
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")
TRUE
file.exists("vide.txt")
TRUE
file.exists("vide.csv")
FALSE

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

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)
birthdatePrenomNomsex
661983-08-04 Sabine Lejeune F
671995-05-24 Timothée Marchand M
681990-06-05 Sylvie Roux-Delattre F
691985-02-14 Patrick-Daniel Barre M
701981-02-20 Laurent Lacombe-LecomteM
711990-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)
birthdatePrenomNomsexprenomnom
1985-07-02 Anaïs-Adrienne Launay F Anaïs-Adrienne Launay
1994-11-11 Benjamin Delmas de la GrosM 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 par Chè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)
26.7460643394935

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)
TRUE

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)
26.7460643394935

À 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)
28
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)
birthdatePrenomNomsexprenomnomforme_mas_femmessageage_birthage_colleguesmessage_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)
birthdatePrenomNomsexprenomnomforme_mas_femmessageage_birthage_colleguesmessage_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)

for loops

Numéro1

En utilisant les variables suivantes: x=1 y=40 i=c(1:10) Pour cet exercice, écrivez une boucle for () qui incrémente x par trois et diminue y par deux, pour chaque i.

x=1
y=40
i=c(1:10)
for (j in i)
{x=x+3
 y=y-2
print(paste(x, y, sep="_"))
}

Numéro 2

Soit les variables:

a=15:10
b=20:15

Pour cet exercice, écrivez une boucle while() qui calcule un vecteur x = 225 224 221 216 209 200, tel que

x[1]=a[1]*b[6]
x[2]=a[2]*b[5]
x[3]=a[3]*b[5]
.
.
x[6]=a[6]*b[1]
x=c()
i=1
j=6
while (i<7)
{
  x[i]=a[i]*b[j]
  i=i+1
  j=j-1
}
x

numero 3

en utilisant la variable suivante:

a=1:10

Pour cet exercice, écrivez une boucle while () qui calcule un vecteur x = 1 3 6 10 15 21 28 36 45 55, tel que

x[1]=a[1]
x[2]=a[1]+a[2]
x[3]=a[1]+a[2]+a[3]
.
.
a=1:10

i=1
x=c()
while (i<=10)
  {
  x[i]=sum(a[1:i])
  i=i+1
  }
x

Numéro 4

en utilisant la variable suivante:

i=10
x=10

Pour cet exercice, écrivez une boucle repeat() qui diminue en calculant x = x / i jusqu'à ce que i = 0.

i=10
x=10

repeat
  {x=x/i
  print(x)
  i=i-1
  if (i==0)
    break
  }
[1] 1
[1] 0.1111111
[1] 0.01388889
[1] 0.001984127
[1] 0.0003306878
[1] 6.613757e-05
[1] 1.653439e-05
[1] 5.511464e-06
[1] 2.755732e-06
[1] 2.755732e-06

Numéro 5

Puisque vous êtes en fin de session, vous voulez faire un plan d'étude pour bien réussir vos examens. Ecrivez une boucle repeat qui permet d'afficher toutes les dates entre aujourd'hui et le jour de votre dernier examen:

auj<-as.Date(Sys.Date(),"%d/%m/%Y")
dernier_exam<-as.Date("18/04/2018","%d/%m/%Y")
repeat
{
auj<-auj+1
    print(auj)
if (auj==dernier_exam)
  break
}
[1] "2018-03-29"
[1] "2018-03-30"
[1] "2018-03-31"
[1] "2018-04-01"
[1] "2018-04-02"
[1] "2018-04-03"
[1] "2018-04-04"
[1] "2018-04-05"
[1] "2018-04-06"
[1] "2018-04-07"
[1] "2018-04-08"
[1] "2018-04-09"
[1] "2018-04-10"
[1] "2018-04-11"
[1] "2018-04-12"
[1] "2018-04-13"
[1] "2018-04-14"
[1] "2018-04-15"
[1] "2018-04-16"
[1] "2018-04-17"
[1] "2018-04-18"