Exercice 1: Utilisez
%>%
pour faire la suite de sélections suivantes surexpt1
:
- Gardez les plantes qui ne sont pas du background Ler, et qui ont été traitées avec la température fluctuante.
- Ne gardez que les colonnes qui contiennent le génotype, la longueur de “blade” et des information sur le “bolting” (aide: utilisez
contains()
)
filter(expt1, background!="Ler" & fluctuation=="Var") %>%
select(genotype, blade.length.mm, contains("bolt"))
## # A tibble: 389 × 5
## genotype blade.length.mm bolt.survival bolt days.to.bolt
## <chr> <dbl> <chr> <chr> <dbl>
## 1 Col Ama 15.1 Y Y 32
## 2 Col Ama 16 Y Y 32
## 3 Col Ama 17.5 Y Y 32
## 4 Col Ama 15.1 Y Y 33
## 5 Col Ama 15 Y Y 33
## 6 Col Ama 15.1 Y Y 33
## 7 Col Ama 13.7 Y Y 33
## 8 Col Ama 17.7 Y Y 33
## 9 Col Ama 29.7 Y Y 68
## 10 Col Ama 22.1 Y Y 68
## # ℹ 379 more rows
BONUS: Transformez l’enchainement de commandes afin d’utiliser des pipes
%>%
plutôt que objets intermédiaires
expt1 <- read_tsv("../data/burghardt_et_al_2015_expt1.txt")
expt1_filtered <- filter(expt1, fluctuation=="Con" & day.length=="16")
expt1_selected <- select(expt1_filtered,days.to.bolt:total.leaf.length.mm)
summary(expt1_selected)
## days.to.bolt days.to.flower rosette.leaf.num cauline.leaf.num
## Min. : 15.00 Min. : 21.0 Min. : 6.00 Min. : 1.000
## 1st Qu.: 26.75 1st Qu.: 39.0 1st Qu.:14.00 1st Qu.: 4.000
## Median : 41.50 Median : 49.0 Median :30.00 Median : 7.000
## Mean : 45.00 Mean : 53.6 Mean :31.67 Mean : 6.827
## 3rd Qu.: 57.00 3rd Qu.: 70.0 3rd Qu.:46.00 3rd Qu.: 9.000
## Max. :152.00 Max. :135.0 Max. :91.00 Max. :13.000
## NA's :7 NA's :9 NA's :9
## blade.length.mm total.leaf.length.mm
## Min. : 8.20 Min. :10.90
## 1st Qu.:14.45 1st Qu.:22.12
## Median :19.20 Median :30.50
## Mean :18.39 Mean :29.01
## 3rd Qu.:21.57 3rd Qu.:34.52
## Max. :28.20 Max. :47.00
## NA's :78 NA's :62
Solution:
read_tsv("../data/burghardt_et_al_2015_expt1.txt") %>%
filter(fluctuation=="Con" & day.length=="16") %>%
select(days.to.bolt:total.leaf.length.mm) %>%
summary()
## days.to.bolt days.to.flower rosette.leaf.num cauline.leaf.num
## Min. : 15.00 Min. : 21.0 Min. : 6.00 Min. : 1.000
## 1st Qu.: 26.75 1st Qu.: 39.0 1st Qu.:14.00 1st Qu.: 4.000
## Median : 41.50 Median : 49.0 Median :30.00 Median : 7.000
## Mean : 45.00 Mean : 53.6 Mean :31.67 Mean : 6.827
## 3rd Qu.: 57.00 3rd Qu.: 70.0 3rd Qu.:46.00 3rd Qu.: 9.000
## Max. :152.00 Max. :135.0 Max. :91.00 Max. :13.000
## NA's :7 NA's :9 NA's :9
## blade.length.mm total.leaf.length.mm
## Min. : 8.20 Min. :10.90
## 1st Qu.:14.45 1st Qu.:22.12
## Median :19.20 Median :30.50
## Mean :18.39 Mean :29.01
## 3rd Qu.:21.57 3rd Qu.:34.52
## Max. :28.20 Max. :47.00
## NA's :78 NA's :62
Exercice 2: Faite un violon plot du temps de floraison pour les différents génotypes, mais uniquement pour les plantes ayant poussées en jours court (8h de lumière).
Aide: Utilisez
filter()
pour sélectionner les données et ensuite un pipe (%>%
) pour utiliser l’output pour le graphique.
filter(expt1, day.length==8) %>%
ggplot((aes( x=genotype, y=days.to.flower))) +
geom_violin() +
ggtitle("plantes ayant poussées en jours court (8h de lumière)")
## Warning: Removed 74 rows containing non-finite values (`stat_ydensity()`).
BONUS
Représentez, uniquement pour les plantes qui contiennent le mot “Col” dans le background, et qui ont poussée à 22°C, un box plot de days.to.bolt en fonction de vernalization, coloré en fonction de la fluctuation. Séparez les graphiques pour avoir une facet par génotype. Utilisez un thème de type theme_bw.
Interprétez le résultat: Est-ce que le temps de floraison de certains génotypes est affecté par la fluctuation de température. Si oui lesquels?
filter(expt1, grepl("Col", background) & temperature == 22) %>%
ggplot(aes(x=vernalization, y=days.to.bolt, color=fluctuation)) +
geom_boxplot()+
facet_grid(.~genotype) +
theme_bw()
Interprétation du résultat: On peut voir un effet très marqué de la fluctuation de température pour certains génotypes, avec un temps de floraison plus précoce quand la température varie par rapport à quand elle ne varie pas. Cet effet est très marqué pour les génotypes Col FRI, prmt5 FRI et vin3-4 FRI.
Exercice 3:
Créez une nouvelle colonne “blade.ratio” avec le ratio de
blade.length.mm
ettotal.leaf.length.mm
mutate(expt1, blade.ratio=blade.length.mm/total.leaf.length.mm)
## # A tibble: 957 × 16
## plant_nb genotype background temperature fluctuation day.length vernalization
## <dbl> <chr> <chr> <dbl> <chr> <dbl> <chr>
## 1 1 Col Ama Col 12 Con 16 NV
## 2 2 Col Ama Col 12 Con 16 NV
## 3 3 Col Ama Col 12 Con 16 NV
## 4 4 Col Ama Col 12 Con 16 NV
## 5 5 Col Ama Col 12 Con 16 NV
## 6 6 Col Ama Col 12 Con 16 NV
## 7 7 Col Ama Col 12 Con 16 NV
## 8 8 Col Ama Col 12 Con 16 NV
## 9 1 Col Ama Col 12 Con 8 NV
## 10 2 Col Ama Col 12 Con 8 NV
## # ℹ 947 more rows
## # ℹ 9 more variables: bolt.survival <chr>, bolt <chr>, days.to.bolt <dbl>,
## # days.to.flower <dbl>, rosette.leaf.num <dbl>, cauline.leaf.num <dbl>,
## # blade.length.mm <dbl>, total.leaf.length.mm <dbl>, blade.ratio <dbl>
BONUS:
Créez une nouvelle colonne “late.flowering” qui contientTRUE
si days.to.bolt est supérieur à 70, etFALSE
days.to.bolt est inférieur à 70.
Aide: Trouvez la solution en utilisant google
# En tapant "mutate tidyverse create new column depending on value other column" dasn google, le 1er site (https://www.marsja.se/r-add-column-to-dataframe-based-on-other-columns-conditions-dplyr/) propose plusieurs solutions pour créer une colonne en fonction des valeurs d'une autre colonne. Voici l'une d'elles qui utilise la fonction mutate():
mutate(expt1, late.flowering=if_else(condition = days.to.bolt>70, TRUE, FALSE))
## # A tibble: 957 × 16
## plant_nb genotype background temperature fluctuation day.length vernalization
## <dbl> <chr> <chr> <dbl> <chr> <dbl> <chr>
## 1 1 Col Ama Col 12 Con 16 NV
## 2 2 Col Ama Col 12 Con 16 NV
## 3 3 Col Ama Col 12 Con 16 NV
## 4 4 Col Ama Col 12 Con 16 NV
## 5 5 Col Ama Col 12 Con 16 NV
## 6 6 Col Ama Col 12 Con 16 NV
## 7 7 Col Ama Col 12 Con 16 NV
## 8 8 Col Ama Col 12 Con 16 NV
## 9 1 Col Ama Col 12 Con 8 NV
## 10 2 Col Ama Col 12 Con 8 NV
## # ℹ 947 more rows
## # ℹ 9 more variables: bolt.survival <chr>, bolt <chr>, days.to.bolt <dbl>,
## # days.to.flower <dbl>, rosette.leaf.num <dbl>, cauline.leaf.num <dbl>,
## # blade.length.mm <dbl>, total.leaf.length.mm <dbl>, late.flowering <lgl>
Exercice 4:
Reproduisez cette figure de Burghard et al 2015
Aide:
Créez une nouvelle colonne (blade.ratio) avec le ratio de
blade.length.mm
ettotal.leaf.length.mm
Créez une nouvelle colonne (nommée par exemple
condition
) en concaténantday.length
,temperature
etfluctuation
Sélectionnez les background
Col
etLer
Faites un boxplot du ratio de
blade.length.mm
ettotal.leaf.length.mm
en fonction de lacondition
, en créant des facets en fonction du backgroundPas besoin de mettre de la couleur qui n’apporte rien au graphique
N’essayez pas de reproduire l’ordre des conditions (sur l’axe x). Nous verrons comment le faire à la prochaine séance
mutate(expt1, blade.ratio=blade.length.mm/total.leaf.length.mm) %>%
unite("condition", day.length, temperature, fluctuation, sep=".") %>%
filter(background%in%c("Col","Ler")) %>%
ggplot(aes(x=condition, y=blade.ratio)) +
geom_boxplot()+
ylim(0,1) +
facet_grid(.~background) +
theme(axis.text.x=element_text(angle = 45))
## Warning: Removed 150 rows containing non-finite values (`stat_boxplot()`).
BONUS: Ce bonus vous permettra d’avoir des valeurs de x plus proches du graphique
- Avant de créer la nouvelle colonne en concaténant
day.length
,temperature
etfluctuation
, créer une colonneLD.SD
dans laquelle vous aurez “LD” à la place de la valeur “16” de la colonneday.length
, et “SD” à la place de la valeur “8” de la colonneday.length
. Utilisez ensuite cette colonneLD.SD
pour la concaténation avectemperature
etfluctuation
pour créer la colonnecondition
- Changez le thème du graphique pour enlever la grille et avoir un fond blanc.
mutate(expt1, blade.ratio=blade.length.mm/total.leaf.length.mm) %>%
mutate(LD.SD=str_replace(day.length, "16","LD"),
LD.SD=str_replace(LD.SD, "8","SD")) %>%
unite("condition", LD.SD, temperature, fluctuation, sep=".") %>%
filter(background%in%c("Col","Ler")) %>%
ggplot(aes(x=condition, y=blade.ratio)) +
geom_boxplot()+
ylim(0,1) +
facet_grid(.~background) +
theme_bw() +
theme(axis.text.x=element_text(angle = 45),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
## Warning: Removed 150 rows containing non-finite values (`stat_boxplot()`).