Je dispose de plusieurs fichiers avec des nombres de colonnes variables, certaine de ces colonnes (avec des emplacements variables) ont un nom contenant un motif particulier. Pour ces colonnes je voudrais transformer leur contenu pour ne garder que la partie du texte avant le ":". par exemple
Code : Tout sélectionner
donnee<-data.frame(A=1:5,B_Motif=paste0(LETTERS[1:5],":1"),C=runif(5),D_Motif=paste0(LETTERS[1:5],":2"))
donnee
A B_Motif C D_Motif
1 1 A:1 0.08900216 A:2
2 2 B:1 0.56075012 B:2
3 3 C:1 0.55193915 C:2
4 4 D:1 0.32601006 D:2
5 5 E:1 0.94918216 E:2
Pour les colonnes B_Motif et D_Motif, je ne voudrais garder que les lettres
Pour faire ça j'ai fait comme ça :
Code : Tout sélectionner
l_motif<-grep("Motif",colnames(donnee))
donnee[,l_motif]<-apply(donnee[,l_motif],2,function(x) sapply(strsplit(x,":"), `[`, 1))
donnee
A B_Motif C D_Motif
1 1 A 0.08900216 A
2 2 B 0.56075012 B
3 3 C 0.55193915 C
4 4 D 0.32601006 D
5 5 E 0.94918216 E
ce qui fonctionne très bien mais est un peu prise de tête à comprendre.
Ma 1ere idée avait été d'utiliser les fonctions "mutate_if" et "contains" de dplyr, mais là je n'ai pas réussit à obtenir un code opérationnel.
Si quelqu'un a une idée, je suis preneur.
Serge
Edit :Mon message n' a pas été poster dans le but d'enrichir la discussion viewtopic.php?f=3&t=8816 :-)