Formation J4
Exo 1
```
# Créez une séquence de type double contenant 20 chiffres,
# la suite de chiffres commence par 1 et finit par 3, c'est à
# dire que le premier élément est 1 et le 20ième élément est égal à 3.
# Assignez le résultat à un objet.
z <- seq(from = 1, to = 3, length.out = 20)
# Utilisez la fonction sample pour sélectionner au hasard
# 20 valeurs parmis "Sonny Crockett", "Ricardo Tubbs" et
# "Martin Castillo". Assignez le résultat à un objet noms.
miami_cops <- c("Sonny Crockett", "Ricardo Tubbs", "Martin Castillo")
miami_cops <- sample(miami_cops, size = 20, replace = TRUE)
# Comptez le nombre de lettres des éléments de noms avec
# nchar. Assignez le résultat à un objet taille_nom.
miami_nchar <- nchar(miami_cops)
#' Créez un data.frame avec les 3 variables.
#' La colonne des noms doit être une colonne de type character.
dat <- data.frame(z = z,
nom = miami_cops,
taille_nom = miami_nchar,
stringsAsFactors = FALSE)
#' Modifier les noms des colonnes avec la fonction
#' toupper. Utilisez names.
names(dat) <- toupper(names(dat))
```
```
library(readr)
library(dplyr)
tournesol <- read_delim("data/tournesol.csv", delim = ";",
locale = locale(decimal_mark = ","),
col_types = cols(
ecotype = col_character(),
plt = col_integer(),
etat = col_character(),
longitude = col_double(),
latitude = col_double(),
semflo = col_integer(),
haut = col_integer(),
rambas = col_integer(),
longfeu = col_integer(),
grlon = col_double(),
huile = col_double()
))
# jusque 4, class petite
# jusque 5, class moyenne
# jusque 6, class grande
# au dessus de 6, class enorme
labels <- c("petite", "moyenne", "grande", "enorme")
# avec tidyverse et cut ----
tournesol <- tournesol %>% mutate(
grlon_fac = cut(grlon, breaks = c(-Inf, 4:6, Inf), labels = labels)
)
# avec base R et cut ----
tournesol[["grlon_fac"]] <- cut(tournesol[["grlon"]], breaks = c(-Inf, 4:6, Inf), labels = labels)
# avec tidyverse et case_when ----
tournesol %>% mutate(
grlon_fac = case_when(
grlon < 4 ~ "petite",
grlon < 5 ~ "moyenne",
grlon < 6 ~ "grande",
TRUE ~ "enorme")
) %>% mutate(
grlon_fac = factor(grlon_fac, levels = labels)
) %>% arrange(grlon_fac)
#' Regrouper les modalités ‘grande’ et ‘enorme’ en une modalités
#' ‘importante’ avec la commande levels :
grlon_fac <- tournesol[["grlon_fac"]]
levels(grlon_fac) <- c("petite", "moyenne", "importante", "importante")
grlon_fac <- tournesol[["grlon_fac"]]
levels(grlon_fac)[3:4] <- "importante"
tournesol %>% mutate(
grlon_fac = factor(as.character(grlon_fac),
levels = c("petite", "moyenne", "grande", "enorme"),
labels = c("petite", "moyenne", "importante", "importante"))
) %>% count(grlon_fac)
# reponse avec [
lev <- c("aucune", "niveau 1" ,"niveau 2" ,"niveau 3" ,"maximum")
tournesol %>% mutate(
rambas = factor(lev[rambas + 1], levels = lev)
) %>% count(rambas)
# reponse avec factor uniquement
lev <- c("aucune", "niveau 1" ,"niveau 2" ,"niveau 3" ,"maximum")
tournesol %>% mutate(
rambas = factor(rambas, levels = seq(0L, 4L, by = 1L), labels = lev)
) %>% count(rambas)
```
```
library(dplyr)
dat <- iris[1:8,]
dat$Sepal.Length[1:3] <- NA_real_
head(dat)
centre_reduit <- function(x, suppr_nonfinies = TRUE){
if(!is.numeric(x)){
stop("x is supposed to be numeric")
}
if(length(x) < 2){
stop("Je ne veux pas calculer une moyenne avec un seul element")
}
z <- x
if(suppr_nonfinies){
z <- z[is.finite(z)]
}
(x - mean(z))/sd(z)
}
mutate(dat, Sepal.Length = centre_reduit(Sepal.Length))
mutate(dat, Sepal.Length = centre_reduit(Species))
dat %>%
mutate(by = seq_len(nrow(dat))) %>%
group_by(by) %>%
mutate(Sepal.Length = centre_reduit(Sepal.Length, suppr_nonfinies = FALSE))
```
````
dat <- data.frame(x = runif(10), y = runif(10), z = runif(10))
dat[1:2,c(1,3)] <- NA_real_
dat[3:4,2] <- NA_real_
dat[5:6,1:2] <- NA_real_
dat
coalesce <- function(a, b){
la_ou_a_est_na <- is.na(a)
a[la_ou_a_est_na] <- b[la_ou_a_est_na]
a
}
dat %>%
mutate(w = coalesce(x,y))
multicoalesce <- function(...){
x <- list(...)
Reduce(coalesce, x)
}
dat %>% mutate(w = multicoalesce(x,y,z))
````