Les données importées depuis Excel sont le plus souvent soit du texte, soit des données numériques soit des dates. Il convient de vérifier la structure des données importées et de les convertir si besoin. Des données numériques ou des dates ont pu être interprétées en texte par exemple.
La fonction str() renvoie le type des variables de votre tableau.
NB : les principaux types
str(iris)
## Classes 'tbl_df', 'tbl' and 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : chr "setosa" "setosa" "setosa" "setosa" ...
Les fonctions suivantes permettent de convertir vos données
Je créé des données fictives possiblement issues de Excel avec les problèmes les plus couramment rencontrés.
library(tidyverse)
fic_excel_fictif <-
tibble(
id=c("1","2","NULL","4","5"),
sexe=c(1,1,2,2,1),
ddn=c("01/01/2020","01/02/2020","02/01/2020","01/05/2020","01/06/2020"),
taille=c("1,23","1,22","1,43", "1,32","1,12"),
ville=c("Montpellier","Marseille","Marseille","Paris","Lyon")
)
fic_excel_fictif
## # A tibble: 5 × 5
## id sexe ddn taille ville
## <chr> <dbl> <chr> <chr> <chr>
## 1 1 1 01/01/2020 1,23 Montpellier
## 2 2 1 01/02/2020 1,22 Marseille
## 3 NULL 2 02/01/2020 1,43 Marseille
## 4 4 2 01/05/2020 1,32 Paris
## 5 5 1 01/06/2020 1,12 Lyon
str(fic_excel_fictif)
## tibble [5 × 5] (S3: tbl_df/tbl/data.frame)
## $ id : chr [1:5] "1" "2" "NULL" "4" ...
## $ sexe : num [1:5] 1 1 2 2 1
## $ ddn : chr [1:5] "01/01/2020" "01/02/2020" "02/01/2020" "01/05/2020" ...
## $ taille: chr [1:5] "1,23" "1,22" "1,43" "1,32" ...
## $ ville : chr [1:5] "Montpellier" "Marseille" "Marseille" "Paris" ...
NB : la fonction mutate
permet de modifier une variable
/ colonne ou d’ajouter une nouvelle variable/colonne.
Commentaire code :
fic_excel_fictif_modif <-
fic_excel_fictif %>%
mutate(id=na_if(id,"NULL")) %>%
mutate(id_numeric=as.integer(id)) %>%
relocate(id,id_numeric)
fic_excel_fictif_modif
## # A tibble: 5 × 6
## id id_numeric sexe ddn taille ville
## <chr> <int> <dbl> <chr> <chr> <chr>
## 1 1 1 1 01/01/2020 1,23 Montpellier
## 2 2 2 1 01/02/2020 1,22 Marseille
## 3 <NA> NA 2 02/01/2020 1,43 Marseille
## 4 4 4 2 01/05/2020 1,32 Paris
## 5 5 5 1 01/06/2020 1,12 Lyon
Commentaire code :
fic_excel_fictif_modif <-
fic_excel_fictif %>%
mutate(taille=str_replace(taille,",",".")) %>%
mutate(taille_numeric=as.integer(taille)) %>%
relocate(taille,taille_numeric)
fic_excel_fictif_modif
## # A tibble: 5 × 6
## taille taille_numeric id sexe ddn ville
## <chr> <int> <chr> <dbl> <chr> <chr>
## 1 1.23 1 1 1 01/01/2020 Montpellier
## 2 1.22 1 2 1 01/02/2020 Marseille
## 3 1.43 1 NULL 2 02/01/2020 Marseille
## 4 1.32 1 4 2 01/05/2020 Paris
## 5 1.12 1 5 1 01/06/2020 Lyon
NB : dans l’exemple on utilise la fonction dmy() car les dates texte sont sous le format JJ/MM/AAAA. Pour un format américain MM/JJ/AAAA, on utiliserait la fonction mdy(). Pour un format ‘à l’envers’ AAAA/MM/JJ on utiliserait ymd().
Commentaire code :
library(lubridate)
fic_excel_fictif_modif <-
fic_excel_fictif %>%
mutate(ddn_format=dmy(ddn)) %>%
relocate(ddn,ddn_format)
fic_excel_fictif_modif
## # A tibble: 5 × 6
## ddn ddn_format id sexe taille ville
## <chr> <date> <chr> <dbl> <chr> <chr>
## 1 01/01/2020 2020-01-01 1 1 1,23 Montpellier
## 2 01/02/2020 2020-02-01 2 1 1,22 Marseille
## 3 02/01/2020 2020-01-02 NULL 2 1,43 Marseille
## 4 01/05/2020 2020-05-01 4 2 1,32 Paris
## 5 01/06/2020 2020-06-01 5 1 1,12 Lyon
NB : on convertit rarement une variable texte en facteur car R considère par défaut une variable texte comme une variable catégorielle. Mais cela peut être utile si on veut changer une valeur de référence dans un modèle logistic par exemple.
Commentaire code :
fic_excel_fictif_modif <-
fic_excel_fictif %>%
mutate(ville_facteur=as_factor(ville)) %>%
mutate(ville_facteur_ref=fct_relevel(ville_facteur,c("Paris"))) %>%
relocate(ville,ville_facteur,ville_facteur_ref)
fic_excel_fictif_modif
## # A tibble: 5 × 7
## ville ville_facteur ville_facteur_ref id sexe ddn taille
## <chr> <fct> <fct> <chr> <dbl> <chr> <chr>
## 1 Montpellier Montpellier Montpellier 1 1 01/01/2020 1,23
## 2 Marseille Marseille Marseille 2 1 01/02/2020 1,22
## 3 Marseille Marseille Marseille NULL 2 02/01/2020 1,43
## 4 Paris Paris Paris 4 2 01/05/2020 1,32
## 5 Lyon Lyon Lyon 5 1 01/06/2020 1,12
NB : la conversion de la variable numeric en facteur va permettre d’indiquer à R de considérer la variable comme une variable catégorielle et non comme une variable numéric.
Commentaire code :
fic_excel_fictif_modif <-
fic_excel_fictif %>%
mutate(sexe_facteur=factor(sexe,levels=c(1,2),labels=c("femme","homme"))) %>%
mutate(sexe_facteur_ref=fct_relevel(sexe_facteur,c("homme","femme"))) %>%
relocate(sexe,sexe_facteur,sexe_facteur_ref)
fic_excel_fictif_modif
## # A tibble: 5 × 7
## sexe sexe_facteur sexe_facteur_ref id ddn taille ville
## <dbl> <fct> <fct> <chr> <chr> <chr> <chr>
## 1 1 femme femme 1 01/01/2020 1,23 Montpellier
## 2 1 femme femme 2 01/02/2020 1,22 Marseille
## 3 2 homme homme NULL 02/01/2020 1,43 Marseille
## 4 2 homme homme 4 01/05/2020 1,32 Paris
## 5 1 femme femme 5 01/06/2020 1,12 Lyon
Commentaire code :
fic_excel_fictif_modif <-
fic_excel_fictif_modif %>%
mutate(sexe_texte=as.character(sexe_facteur)) %>%
relocate(sexe,sexe_texte,sexe_facteur)
fic_excel_fictif_modif
## # A tibble: 5 × 8
## sexe sexe_texte sexe_facteur sexe_facteur_ref id ddn taille ville
## <dbl> <chr> <fct> <fct> <chr> <chr> <chr> <chr>
## 1 1 femme femme femme 1 01/01/2020 1,23 Montpe…
## 2 1 femme femme femme 2 01/02/2020 1,22 Marsei…
## 3 2 homme homme homme NULL 02/01/2020 1,43 Marsei…
## 4 2 homme homme homme 4 01/05/2020 1,32 Paris
## 5 1 femme femme femme 5 01/06/2020 1,12 Lyon