« Questions-r » : différence entre les versions

De Wiki ISIG
Aller à la navigation Aller à la recherche
(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: combi des '''expressions régulières''' et de la fonction '''basename()''':
'''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