bonjour,
Je dois analyser une base de données avec un grand nombre de variables ayant toutes des noms différents (pas de suffixes ou de préfixes).
Sur cette base de données, je souhaite effectuer une commande basique : créer une nouvelle ligne par individu contenant la soustraction entre deux temps de mesures pour toutes mes variables quantitatives. Seulement, je voudrais automatiser en définissant par exemple une liste contenant le nom des variables. Dans l'exemple, ci dessous j'ai réduit à 2 variables mais j'en ai 200 avec des noms différents. J'utilise le package dplyr mais je ne vois pas comment faire pour automatiser. Peut être ajouter cette commande dans une fonction pour utiliser une liste ?
Voici un exemple de comment est formatée la table :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 set.seed(20200312) data <- data.frame( individu = rep(paste("R", 1:50, sep =""), each = 2), temps= rep(c(1, 2), 50), var1 = rnorm(100), var2 = rnorm(100), stringsAsFactors = FALSE )
La commande que je souhaite appliquer (soustraction entre les deux temps de mesure pour l'ensemble des individus) sur quasiment toutes mes variables de la base de données (d'où la recherche d'automatisation car elles ont toutes un nom différent et pas de suffixe comme dans l'exemple ci-dessous) est la suivante :
J'ai tenté un début mais ça ne fonctionne pas et je ne suis pas certaine d'utiliser la meilleure option
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 library(dplyr) data %>% group_by(individu) %>% arrange(temps) %>% do(bind_rows( ., summarise(., individu = unique(individu), temps = 3, var1 = first(var1) - last(var1) var2 = first(var2) - last(var2) ) )) %>% ungroup() %>% arrange(individu, temps)
N'hésitez pas si besoin de complément sur ce que je souhaite faire ou le code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 liste_var<-c("var1",var2") boucle<-function(X) { data %>% group_by(individu) %>% arrange(temps) %>% do(bind_rows( ., summarise(., individu = unique(individu), temps = 3, var1 = first(var1) - last(var1) var2 = first(var2) - last(var2) ) )) %>% ungroup() %>% arrange(individu, temps) } boucle(liste_var)
Merci pour votre aide.
Partager