Exercice 1 : Sélectionnez les colonnes qui contiennent des données mesurées en mm
select(expt1, contains("mm"))
## # A tibble: 957 × 2
## blade.length.mm total.leaf.length.mm
## <dbl> <dbl>
## 1 12.9 21.1
## 2 10.5 19.1
## 3 13.2 23.4
## 4 14.6 27.2
## 5 13.3 20.4
## 6 14.7 25.3
## 7 13 23.2
## 8 17.8 31.3
## 9 20.7 33.1
## 10 19.4 33.2
## # ℹ 947 more rows
BONUS:
1. Sélectionnez les colonnes dont le titre finit par “bolt”
Aide: Regardez les exemples dans l’aide de R ou cherchez dans google
# En tapant "R tidyverse select column that ends with a specific text" dans google, le 1er site (https://dplyr.tidyverse.org/reference/select.html) indique d'utiliser "ends_with" dans la fonction select
select(expt1, ends_with("bolt"))
## # A tibble: 957 × 2
## bolt days.to.bolt
## <chr> <dbl>
## 1 Y 28
## 2 Y 29
## 3 Y 31
## 4 Y 31
## 5 Y 32
## 6 Y 33
## 7 Y 34
## 8 Y 35
## 9 Y 69
## 10 Y 72
## # ℹ 947 more rows
> 2. Sélectionnez les colonnes qui ne sont pas
plant_nb
et genotype
select(expt1, -plant_nb, -genotype)
## # A tibble: 957 × 13
## background temperature fluctuation day.length vernalization bolt.survival
## <chr> <dbl> <chr> <dbl> <chr> <chr>
## 1 Col 12 Con 16 NV Y
## 2 Col 12 Con 16 NV Y
## 3 Col 12 Con 16 NV Y
## 4 Col 12 Con 16 NV Y
## 5 Col 12 Con 16 NV Y
## 6 Col 12 Con 16 NV Y
## 7 Col 12 Con 16 NV Y
## 8 Col 12 Con 16 NV Y
## 9 Col 12 Con 8 NV Y
## 10 Col 12 Con 8 NV Y
## # ℹ 947 more rows
## # ℹ 7 more variables: 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>
Exercice 2: Filtrez les données pour garder les plantes selon les 3 cas de figures suivant (indépendants les uns des autres):
- Plantes qui ne sont pas du background Ler et qui ont été traitées avec une température fluctuante.
- Plantes qui ont fleuries (bolt) en moins de 57 jours et qui ont moins de 40 feuilles de rosette
- Plantes du génotype fca-6 pour qui le blade.ratio n’est pas manquant
# 1. Filtrez les plantes qui ne sont pas du background Ler et qui ont été traitées avec une température fluctuante.
filter(expt1, background!="Ler" & fluctuation=="Var")
## # A tibble: 389 × 15
## plant_nb genotype background temperature fluctuation day.length vernalization
## <dbl> <chr> <chr> <dbl> <chr> <dbl> <chr>
## 1 1 Col Ama Col 12 Var 16 NV
## 2 2 Col Ama Col 12 Var 16 NV
## 3 3 Col Ama Col 12 Var 16 NV
## 4 4 Col Ama Col 12 Var 16 NV
## 5 5 Col Ama Col 12 Var 16 NV
## 6 6 Col Ama Col 12 Var 16 NV
## 7 7 Col Ama Col 12 Var 16 NV
## 8 8 Col Ama Col 12 Var 16 NV
## 9 1 Col Ama Col 12 Var 8 NV
## 10 2 Col Ama Col 12 Var 8 NV
## # ℹ 379 more rows
## # ℹ 8 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>
# 2. Filtrez les plantes qui ont fleuries (bolt) en moins de 57 jours et qui ont moins de 40 feuilles.
filter(expt1, days.to.bolt<57 & rosette.leaf.num<40)
## # A tibble: 389 × 15
## 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 Var 16 NV
## 10 2 Col Ama Col 12 Var 16 NV
## # ℹ 379 more rows
## # ℹ 8 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>
# 3. Filtrez les plantes du génotype fca-6 pour qui le blade.length.mm n'est pas manquant
filter(expt1, genotype=="fca-6" & !is.na(blade.length.mm))
## # A tibble: 44 × 15
## plant_nb genotype background temperature fluctuation day.length vernalization
## <dbl> <chr> <chr> <dbl> <chr> <dbl> <chr>
## 1 1 fca-6 Ler 12 Con 16 NV
## 2 2 fca-6 Ler 12 Con 16 NV
## 3 3 fca-6 Ler 12 Con 16 NV
## 4 4 fca-6 Ler 12 Con 16 NV
## 5 5 fca-6 Ler 12 Con 16 NV
## 6 6 fca-6 Ler 12 Con 16 NV
## 7 7 fca-6 Ler 12 Con 16 NV
## 8 8 fca-6 Ler 12 Con 16 NV
## 9 1 fca-6 Ler 12 Con 8 NV
## 10 2 fca-6 Ler 12 Con 8 NV
## # ℹ 34 more rows
## # ℹ 8 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>
BONUS:
Filtrez les données pour garder les lignes pour lesquelles le background contient Col
Sauvez le résultat dans un nouvel objet et vérifier quelles valeurs distinctes sont dans la colonne background en utilisant le fonctiondistinct()
Aide: Faites un recherche sur google pour trouver le résultat
# Il existe plusieurs solutions. En tapant "R tidyverse filter lines containing text" dans google
# Le 2eme site (https://www.statology.org/filter-rows-that-contain-string-dplyr/) propose de faire
expt1_col_background <- filter(expt1, grepl("Col", background))
distinct(expt1_col_background,background)
## # A tibble: 2 × 1
## background
## <chr>
## 1 Col
## 2 Col FRI
# Le 4eme site (https://sebastiansauer.github.io/dplyr_filter/) propose de faire
expt1_col_background2 <- filter(expt1, str_detect(background, "Col"))
distinct(expt1_col_background2,background)
## # A tibble: 2 × 1
## background
## <chr>
## 1 Col
## 2 Col FRI
Exercice 3: 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 4: 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 outside the scale range
## (`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 5:
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>