--- title: "support du cours sur Rmarkdown" author: "Damien Belvèze" date: "`r Sys.Date()`" output: pdf_document: default # html_document: default number_sections: true --- # Créer un document en Rmarkdown (provoque le chargement du package Rmarkdown et de quelques autres packages) ## Spécificités du Rmarkdown Rmarkdown est une saveur de markdown destinée à accompagner du code exécutable. (on ne peut pas exécuter du code dans un document en markdown commun) Il existe d'autres "saveurs" de Markdown (par ex. github markdown) ## processus éditorial ```{r} library(DiagrammeR) DiagrammeR::mermaid(" graph TD A[R markdown] -->|Knitter| B(conversion Pandoc) B --> C{formats de sortie} C -->|portable| D[PDF] C -->|en ligne| E[html] C -->|inscriptible| F[word] C -->|editable| G[Latex] ") ``` ## Pour bien commencer la gestion de données avec R Pour bien commencer avec la gestion de données avec R, je recommande le guide "Programming Historians" : [Gestion et Manipulation des données avec R](https://programminghistorian.org/fr/lecons/gestion-manipulation-donnees-r#un-exemple-du-fonctionnement-de-dplyr) # traiter et visualiser des données avec R Rmarkdown est un des moyens d'écrire un article reproductible. Le reviewer aura à sa disposition non seulement le PDF mais aussi le document natif avec son historique et la liste des opérations. Pour plus de réplicabilité, on peut utiliser des environnements virtuels comme *renv* ou *rix* pour capturer aussi les dépendances utilisées (et certaines variables systèmes dans le cas du package *rix*) ## charger un tableau de données en CSV un *chunck* est un bout de code dans un texte en Rmarkdown. Il commence par trois apostrophes arrière (*backticks* en anglais), suivies de *r* entre accolades. Il se termine par trois autres apostrophes arrières. Ce chunck peut être exécuté de différentes manières : | position | partie | rôle | commentaire | |:--|:--|:--|:--| | 1 |\`\`\`| ouverture du chunck | obligatoire, 3 backticks | | 2 | \{r | mention du langage (ici R) | dans du markdown commun \`\`\`r permet d'afficher un bloc de code mais pas de l'exécuter | | 3 | nom du chunck | optionnel, il doit être unique dans le document et ne pas comporter de caractère spécial | optionnel, attention aux apostrophes dans les noms de chuncks | | 4 | echo | FALSE= n'affiche pas le code | optionnel | | 5 | message | FALSE= n'affiche pas les messages | optionnel | | 6 | includes | FALSE= n'affiche ni le code, ni le résultat | optionnel | | 7 | eval | FALSE = n'exécute pas automatiquement quand on knitte | optionnel, utile si le code génère une erreur | ```{r chargement CSV, echo=TRUE, message=TRUE, warning=TRUE, paged.print=TRUE} install.packages("tidyverse", repos = "http://cran.us.r-project.org") library(tidyverse) df <- read.csv("unemployment.csv", header=TRUE, sep = ",") print(df) ``` ## filtrer des données La fonction *read.csv* permet de charger un tableau de données. ```{r} install.packages("dplyr") library(dplyr) df_NZL <- df %>% filter(iso == "NZL") print(df_NZL) ``` La fonction *filter* du package *dplyr* permet d'extraire des données d'un dataframe ('tableau de données') au moyen d'un filtre ; ici on extrait les données dans la colonne *iso* qui correspondent au code *NZL* ```{r} print(df) ``` ```{r} library(dplyr) df_2022 <- df %>% filter(year == 2018) mean_2018 <- mean(df_2022$value) print(mean_2018) ``` ## afficher une variable La moyenne de l'investissement réalisés pour soutenir les salariés touchés par le chômage entre l'Autriche, la Nouvelle-Zélande et l'ensemble de l'OCDE est de `r mean_2018` # réaliser un graphique à partir de ces données ## produire un diagramme en bar avec ggplot2 ```{r} install.packages("ggplot2") library(ggplot2) plot <- ggplot(data=df, aes(x=year, y=value, fill=country)) plot + geom_bar(stat = "identity") ``` ## créer des données fictives pour le Japon et les ajouter au graphique ```{r} # créer un vecteur 'years' pour notre nouveau dataframe allant de 2010 à 2022 years <- 2010:2022 # assigner des valeurs minimales et maximale à notre nouveau dataframe en fonction des valeurs minimales et maximales de la colonne value dans df min_value <- min(df$value) max_value <- max(df$value) # générer pour chaque année (year) une valeur aléatoire entre les valeurs maximale et minimale définies plus haut random_values <- runif(n = length(years), min = min_value, max = max_value) # créer un nouveau dataframe avec ces données et ajouter JPN à chaque ligne dans la colonne iso et 'Japan' à chaque ligne dans la colonne 'country' new_df <- data.frame( iso = "JPN", country = "Japan", year = years, value = round(random_values, 3) ) # concatenater les deux tableaux, le premier (df et le second 'new_df) df_concat <- rbind(df, new_df) # imprimer le tableau concaténé print(df_concat) ```