library(tidyverse)
library(ggpubr)

1. Fonctionalités de RStudio (Environnement, Historique, Console, Terminal, Scripts)

2. Travailler en mode Projet

3. Créer un notebook et générer des rapports html, pdf, word

Avantage : permettra la programmation lettrée et la génération de rapports facilement !

4. Les types de données en R (les conversions entre différents types)

# Les booléens
(bool = c(TRUE, TRUE, FALSE))

# Les numériques
(num = as.numeric(bool))

# Les characters
(char = as.character(num))

# Les facteurs
(fact = as.factor(char))

# Les conversions en sautant des étapes ne se passent pas bien
as.numeric(fact)
as.numeric(as.character(fact))

5. Manipuler les facteurs (réordonner les niveaux, gérer les variables ordinales)

# Création d'un vecteur
(y = c(rep("grand", 8), rep("petit", 6)))

#Conversion en facteur
(y = as.factor(y))

#Réordonner les niveaux
(y = factor(y, levels = c("petit", "grand")))

#Ajouter une notion d'ordre
(y = factor(y,  levels = c("petit", "grand"), ordered = TRUE))

6. Convertir une variable quantitative en facteur (fonction cut())

(Age = round(rnorm(n = 20, mean = 40, sd = 10), digits = 0))

(Age_quali = cut(x = Age, breaks = quantile(Age), labels = c("1Q", "2Q", "3Q", "4Q"), include.lowest = TRUE, ordered_result = TRUE))

table(Age_quali)

7. Les chaines de caractères (fonctions paste() et gsub())

a = 'apple'
b = 'orange'

(paste(a, b))
(paste(a, b, sep = "-"))

gsub(pattern = "p", replacement = "P", x = a)

8. Les vecteurs (fonctions seq(), rep() et names())

# Créer un vecteur
(x = c(1, 4, 6))

(x = seq(from = 0, to = 10, by = 0.5))

(x = seq(from = 0, to = 3, length.out = 10))

(x = rep(0, 5))

(x = rep(c(0, 1), c(5, 4)))

(x = 1:12)

# Sélectionner les élements d'un vecteur par position
x[4]

# Sélectionner les élements d'un vecteur par valeur
x[x == 3]

x[x > 0]

x[x %in% c(1:3)]

# Sélectionner les élements d'un vecteur par nom
names(x) = month.name
x
x['February']

9. Les matrices (fonctions colnames(), rownames(), t(), apply())

(m = matrix(1:9, nrow = 3, ncol = 3))

class(m)

colnames(m) = paste("ind", 1:3, sep = "")
m
rownames(m) = paste("var", 1:3, sep = "")
m
t(m) #transposée de la matrice

# Une matrice contient uniquement des élements du même type
m[2,2] = 'a'
m
m[2,2] = 5
m

# conversion de type
as.numeric(m)
apply(m, 1, as.numeric)

10. Les listes (fonctions summary(), lapply(), sapply(), scope des variables)

(l = list(x = 1:10, y = 'apple'))

class(l)

l$x
l[[2]]
l['y']

summary(l)

# Appliquer une fonction à tous les éléments d'une liste
# Sortie : une autre liste
lapply(X = l, FUN = length)

# Comme lapply mais la sortie est un vecteur ou une matrice
sapply(X = l, FUN = length)

# Notion de scoping : la portée des variables
x
y

11. Les data.frame (fonctions dim(), ncol(), nrow(), head(), View(), cbind(), rbind())

(df = data.frame(x = 1:12, y = month.name))

class(df)

dim(df)
ncol(df)
nrow(df)

head(df, n = 4) 

View(df)

cbind(df, nb = runif(12))

rbind(df, c(13, "New"))
df$y
df$y = as.character(df$y)
rbind(df, c(13, "New"))

(df = data.frame(x = 1:12, y = month.name, stringsAsFactors = FALSE))
df$y
rbind(df, c(13, "New"))

12. Les tibbles

library(tidyverse)
# Dans la console
swiss
as_tibble(swiss) #Affichage plus concis
# Plus de rownames !
as_tibble(swiss, rownames = "Provinces")

13. Gérer les valeurs manquantes (fonctions anyNA(), is.na(), colSums())

metadata = readRDS(file = "TP-metagenomique/metadata.RDS")

View(metadata)

# Savoit quelles sont les colonnes concernées par les données manquantes
apply(X = metadata, MARGIN = 2, anyNA)

table(metadata$status)

apply(X = metadata, MARGIN = 2, is.na)
colSums(apply(X = metadata, MARGIN = 2, is.na))

metadata %>%
  filter(is.na(Crea) | is.na(Alb) | is.na(TB))

metadata2 = metadata %>%
  filter(!is.na(Crea) & !is.na(Alb) & !is.na(TB))

colSums(apply(X = metadata2, MARGIN = 2, is.na))

metadata %>%
  filter(is.na(Enterotype))

14. Outils de manipulation des données (fonctions select(), filter(), opérateur %>%)

# selectionner des colonnes
select(metadata, status, BMI, INR)

metadata %>%
  select(status, BMI, INR)

# sélectionner des colonnes conditionnellement
select_if(metadata, is.factor)

# filtrer les lignes
filter(metadata, status == "liver")

metadata %>% 
  filter(status == "liver")


# Combiner les opérations
metadata %>%
  filter(status == "liver") %>%
  select(Age, BMI) %>%
  plot()
  
# Trier une ou plusieurs colonnes avec arrange
arrange(metadata, Age)

arrange(metadata, -Age)

# Récupérer les noms de lignes
metadata %>%
  rownames_to_column("Ind") %>%
  arrange(Age) %>%
  filter(Crea > 100)

15. Visualisation des données (fonction ggplot())

ggplot(data = metadata, mapping = aes(x = Age, y = BMI))

ggplot(data = metadata, mapping = aes(x = Age, y = BMI)) + 
  geom_point()

ggplot(data = metadata, mapping = aes(x = Gender, y = BMI)) + 
  geom_point()

ggplot(data = metadata, mapping = aes(x = Gender, y = BMI, fill = Gender)) + 
  geom_boxplot() +
  stat_compare_means()

ggplot(data = metadata, mapping = aes(x = Gender, y = BMI, fill = Gender)) + 
  geom_boxplot() +
  stat_compare_means() +
  facet_wrap(~status)