---
# System prepended metadata

title: Tips R

---

# Tips R
[TOC]

* Si vous voulez vous identifier, vous pouvez commencer la ligne par [color=unnomdecouleur]. Ca donnera :
[color=purple] Un commentaire de Violaine. 
[color=pink] Un commentaire de Steven. 
[color=yellow] Un commentaire de Rachel. 
[color=green] Un commentaire de Perrine.


## Fonctions des packages

### Library **tidyr**
* fonction **contains**
[color=yellow] utilisé pour selectionner des variables qui contiennent une certaine chaine de caractère
> Exemple : 
``` ma_table %>% select (contains ("_TOT")) ```
=> *Selectionne toutes les variables qui contiennent "_TOT"*

* fonction **pivot_wider**
[color=yellow] transpose en colonne une variable (ex-fonction spread). Il faut penser à faire un arrange au préalable (pour avoir les années dans l'ordre par exemple) et remplacer les NA par 0 ci-besoin

> Exemple : 
``` ma_table <- ma_table_entree %>% arrange (ANNEE, I_ELST) %>% pivot_wider(names_from = ANNEE, values_from = NB_TERM,values_fn = sum) ```
=> *Transpose l'année en colonne et agrége les données par année et juridiction

### Library **tidyselect**
* fonction **peek_vars**
[color=yellow] utilisé pour ordonner les variables par ordre alphabétique
> Exemple : 
``` ma_table %>% select(sort(peek_vars())) ```

## Fonctions personnalisées
* fonction **pourcentage insécable**
[color=yellow] utilisé pour créer un espace insecable entre le chiffre et le % (pour plus d'esthétique dans les tableaux de sortie)
``` percent_insec <- function(x) 
  {
  if (length(x) == 0) 
    return(character())
  x <- plyr::round_any(x, scales:::precision(x)/100)
  paste0(scales::comma(x * 100), "\u00a0%")
  }
  ```

# A METTRE EN FORME

## nouvelle fonction meta

getMeta(conn_pg, ident_q("mad_perm.cdad323") )

## Récupérer les meta quand on n'a pas les meta
cdad_vue_diffusion_2022 <- dbSendQuery(pg_conn_test, paste0("SELECT * from mad_perm.cdad322"))

liste_variables <- dbColumnInfo(cdad_vue_diffusion_2022)


## connexion environnement de dev
drv <- dbDriver("Oracle")
conn_dev <- dbConnect(drv, dbname="DEV10", username="enquete", password="enquete")

## Rmardown
knitr::opts_chunk$set(echo = FALSE)
#echo=false masque le code au knitr

*<span style="color:orange">ORANGE</span>** pour mettre de la couleur dans le texte

## Packages
library(dplyr)
library(dbplyr) → surcouche de dplyr, permet la manipulation de données directement depuis la base
library(knitr)

## Connections Oracle PostGre
conn_ora <- connectOraSDSE(dbname = "PROD10")
conn_pg <- connectPostgreSDSE(dbname = "prod")

dbDisconnect(conn_ora)


## Analyse mémoire
HTOP → pour regarder la mémoire utilisée par l’ensemble des utilisateurs

Mémoire

```{r memoryusage}
Table1_MEM  <-  object.size(Table1_MEM)
Table2_MEM  <-  object.size(Table2_MEM)
TOTAL_MEM   <-  Table1_MEM +
                Table2_MEM
```



## Lire les données
v_tutimaj_affaires <- tbl(conn_ora, in_schema("TI", "VM_TUTIMAJ_AFFAIRES"))

## Fonctions
meta {RDSE}
Permet d’avoir le libellé des variables

show_query {dplyr}
Permet de regarder la requête SQL lancée

ex : pointeur %>% show_query()
collect {dplyr}
Affiche les données du pointeur dans une table

bind_rows(t1, t2, t3)
bind_rows(table1 = t1, table2 = t2, table3 = t3, .id = "source")


## Requêtes habituelles DplyR

test <- vm_tutimaj_affaires %>%
  filter(I_ELST == '00100598') %>% 
  select(I_ELST, RANG, DADEC, NIA) %>% 
  head(10)

appariement <- table1 %>% left_join(table2 %>% select (variables qui m'intéressent), by = c("I_ELST"))

kable(p_appariement %>% collect())

test2 <- test %>% 
  select(TUS, NATAFF, MODFIN) %>% 
  group_by(NIA) %>% 
  summarise (nb= n()) %>%
arrange(desc(nb))


## Raccourcis

CTRL + M = crée le pipe %>%
CTRL + MAJ + C = Enlève les # du code


## Opérateurs logiques
&	et logique
|	ou logique


## Remplacer NA par 0
nom_table[is.na(nom_table)] <- 0 

## Sélection de plusieurs modalités
%in% c(a,b,c)

## Créer une variable à partir d’une variable dttm
library(lubridate)
year(DASAI)  2013-07-11 00:00:00 ---→  2013
ANSAI=paste(year(DASAI),month(DASAI),sep="-") ---→  20137

## Convertir charactère en date
as.Date("20090131", "%Y%m%d") →

## Retrait de certaines variables
table %>% select(-VARIABLE)
select (-c(VAR1, VAR2, VAR3))

filter (!VARIABLE %in% c("MOD1","MOD2","MOD3"))

Retrait des 3 derniers caractères du NUMERO (sans rang)
mutate (ID_UNIQUE=strtrim(NUMERO,(nchar(NUMERO)-3)))

## Filtre entre deux variables
test <- NB_NOUV %>% filter (I_ELST %between% c('00100798','00100817')) (package data.table)

## Différence en mois entre deux dates
::lubridate
interval(date1, date2) %/% months(1)
en mettant les dates en as.Date au préalable


## Recherche des différences entre deux fichiers
library(diffr)
diffr('0_script_general_2021.R', '0_script_general.R')


