Questions-r
Cette page reprend la "substantifique moelle" des échanges ayant eu lieu sur le channel questions-r du Discord d'ISIG.
Manipulation d'un nom de fichier
Question posée par martiste
Comment récupérer un morceau du nom du fichier ? Par exemple à partir de "zarsqdfqsfd33vezre20618402.csv on veut récupérer 20618402.
Réponse de lvaudor et sdunesme
Combi des expressions régulières et de la fonction basename():
"za/rsqd/fqsfd33vezre20618402.csv" %>%
basename() %>% # donne "fqsfd33vezre20618402.csv"
stringr::str_replace(".csv","") %>% # donne "fqsfd33vezre20618402"
stringr::str_extract(pattern=".{8}(?=\\.$)") # donne "20618402"
Reformattage d'un fichier en "longueur"
Question de mcottet
J'ai une bdd avec plusieurs variables catégorielles qui portent une info similaire (est ce que les gens ont vu l'espèce A un peu, bcp, passionnément, à la folie ; idem pour l'espèce B, C...). Et j'aimerais faire une somme pour savoir combien de fois l'individu 1 a répondu un peu à l'ensemble des espèces proposées, bcp à l'ensemble des espèces... il y a 18 espèces (donc 18 variables)
Réponse de lvaudor
tidyr::pivot_longer()
Dans ta version de BDD, tu as 18 variables différentes Mais en fait, tu pourrais considérer que ces 18 colonnes correspondent en fait à 2 colonnes (une colonne "espece" et une colonne "valeur") Tu cherches de ce fait à répéter l'ensemble des autres colonnes (toutes celles qui ne font pas partie des 18 sus-mentionnées) 18 fois, mais "en hauteur". Du coup, ton tableau qui est "plutôt large" devient un tableau "plutôt long"
Dans l'appel à la fonction, tu précises quelles sont les variables que tu récupères pour les mettre "en long" et toutes les autres, il les répète à l'identique autant de fois que nécessaire
A une époque, ça s'appelait pas pivot_wider() et pivot_longer() mais spread() et gather() (mais c'était moins explicite comme nom)
Complétion des données d'une série temporelle
Question de Théo
j'ai une série temporelle de hauteurs d'eau à pas de temps 15 min, mais il y a plein de trous dedans et je voudrais la compléter, en ajoutant l'heure manquante, et la hauteur d'eau manquante (moyenne de t-15 et t+15 si t est la valeur manquante).
Réponse de martiste
il faut que tu commences par te créer un index de temps à l'intervalle voulu, depuis ta première valeur jusqu'à la dernière, à laquelle tu joins ton jeu de données réel. Les trous vont alors apparaître en 'NA'. Et si tu n'as que quelques trous de jamais plus de 2 intervalles, tu peux utiliser la fonction zoo::na_approx() qui fera l'affaire...
library(dplyr)
H_15_raw = readr::read_delim("H_15MIN_SB_CSV.csv", delim = ";") %>%
mutate(Date = lubridate::dmy_hm(Date))
timestamp = seq(from = min(H_15_raw$Date), to = max(H_15_raw$Date), by = "15 min") %>%
as_tibble() %>%
select(Date = value)
H_15_corr =
left_join(timestamp, H_15_raw, by ="Date") %>%
mutate(H_CM_SB_BH = zoo::na.approx(H_CM_SB_BH))
Regarde ?na.approx pour plus de détails sur son fonctionnement
Annonces de nouveau packages R
banqueHydro
[[1]]
Pour "scraper" les données du site banqueHydro (en attendant l'API Hubeau [[2]]).
Annonces de formations/tutos/conf
supports SIGR [[3]] par defuneste