« Questions-r » : différence entre les versions
(creation page questions-r) |
(ajouts de convs questions-r) |
||
Ligne 3 : | Ligne 3 : | ||
== Manipulation d'un nom de fichier == | == Manipulation d'un nom de fichier == | ||
Question posée par martiste | '''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'''. | 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 | '''Réponse de lvaudor et sdunesme''' | ||
Combi des '''expressions régulières''' et de la fonction '''basename()''': | |||
<syntaxhighlight lang="r"> | <syntaxhighlight lang="r"> | ||
Ligne 15 : | Ligne 17 : | ||
stringr::str_extract(pattern=".{8}(?=\\.$)") # donne "20618402" | stringr::str_extract(pattern=".{8}(?=\\.$)") # donne "20618402" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== 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... | |||
<syntaxhighlight lang="r"> | |||
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)) | |||
</syntaxhighlight> | |||
Regarde ?na.approx pour plus de détails sur son fonctionnement | |||
== Annonces de nouveau packages R == | |||
=== banqueHydro === | |||
[[https://github.com/lvaudor/banqueHydro]] | |||
Pour "scraper" les données du site banqueHydro (en attendant l'API Hubeau [[https://github.com/BRGM/hubeau/projects]]). | |||
== Annonces de formations/tutos/conf == | |||
supports SIGR [[https://sigr2021.github.io/site/index.html]] par defuneste |
Version du 10 janvier 2022 à 16:33
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