Bonjour tous le monde,

Je souhaite concaténer des variables pour créer une variable date.
La convention de nommage fait que les noms de variables terminent toujours par _j pour les pour, _m pour les mois et _a pour les année.
(J'ai mis un fichier d'un exemple simple de données que je peux avoir si vous voulez tester)

Donc ce que je souhaite faire c'est si le début de la variables _j = début de la variable _m = début de la variable _a alors je créé une nouvelle variable _date.
Il peut y avoir aussi des dates avec uniquement le mois et l'année (sans le jour).

ex :
3 variables :
visite_j = 10
visite_m = 06
visite_a = 1963

--> DONNE:

visite_j = 10
visite_m = 06
visite_a = 1963
visite_date = 10/06/1963


J'ai déjà fait un code qui fonctionne mais qui est très long et pas très beau. Je pense qu'il y a une meilleure méthode mais j'ai un peu du mal à trouver. C'est pour cela que je viens vers vous aujourd'hui. Je vous mets quand même mon code à la suite.

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 
tab <- as.data.frame(tab)
 
i = 0
taille <- length(tab)
 
repeat {
 
  i = i + 1
  pre <- regexpr("[^}]+_", names(tab[i]))
  pre <- regmatches(names(tab[i]),pre)
  pre1 <- regexpr("[^}]+_", names(tab[i+1]))
  pre1 <- regmatches(names(tab[i+1]),pre1)
 
  fin <- regexpr("_.+", names(tab[i]))
  fin <- regmatches(names(tab[i]),fin)
  fin1 <- regexpr("_.+", names(tab[i+1]))
  fin1 <- regmatches(names(tab[i+1]),fin1)
 
  if (!identical(pre, character(0)) & !identical(pre1, character(0)) & !identical(fin, character(0))& !identical(fin1, character(0))){
 
    pre2 <- regexpr("[^}]+_", names(tab[i+2]))
    pre2 <- regmatches(names(tab[i+2]),pre2)
    fin2 <- regexpr("_.+", names(tab[i+2]))
    fin2 <- regmatches(names(tab[i+2]),fin2)
 
    if (!identical(fin2, character(0)) & !identical(fin2, character(0))){
      if (pre==pre1 & pre1==pre2){
        if (fin == "_j" & fin1 == "_m" & fin2 == "_a"){
          nom <- paste0(pre,"date")
          tab[,nom] <- paste(tab[,i], tab[,i+1], tab[,i+2], sep="-")
          tab[,nom] <- as.Date(tab[,nom], "%d-%m-%Y")
          i <- i + 2
        }
      }else if (pre == pre1){
        if (fin == "_m" & fin1 == "_a" ){
          nom <- paste0(pre,"date")
          tab[,nom] <- paste(tab[,i], tab[,i+1],sep="-")
          i <- i + 2
        }
      }
    }
    else {
      if (pre == pre1){
        if (fin == "_m" & fin1 == "_a" ){
          nom <- paste0(pre,"date")
          tab[,nom] <- paste(tab[,i], tab[,i+1],sep="-")
          i <- i + 2
        }
      }
    }
  } 
 
  if (i >= taille) break
}
Je vous remercie
Bonne journée