2010-05-07 9 views
2

J'utilise un jeu de données w/variables qui ont des noms très similaires. Je dois appliquer les mêmes fonctions à 13 variables à la fois et j'essaye de raccourcir le code, au lieu de faire chaque variable individuellement.Création d'une boucle dans R pour appliquer les mêmes fonctions à plusieurs variables de même nom

q01a.F=factor(q01a) 
q01b.F=factor(q01b) 
q01c.F=factor(q01c) 
q01d.F=factor(q01d) 
q01e.F=factor(q01e) 
q01f.F=factor(q01f) 
q01g.F=factor(q01g) 
q01h.F=factor(q01h) 
q01i.F=factor(q01i) 
q01j.F=factor(q01j) 
q01k.F=factor(q01k) 
q01l.F=factor(q01l) 
q01m.F=factor(q01m) 

Suggestions?

Répondre

4
## suppose dnow is the data.frame with your variables of interest 
dnow <- data.frame(q01a=rep(1,10), q01b=rep(2,10), q01c=rep(3,10), q02=rlnorm(10)) 
## we need to extract the variable names we need 
## (they start with q01 and end with a, b or c 
## dnow is your data.frame 
vnames <- grep("^q01[a-c]", names(dnow), value=TRUE) ## regular expression matching the names 
for (i in vnames) { 
    dnow[,paste(i, ".F", sep='')] <- factor(dnow[,i]) 
} 
+0

Merci beaucoup! Je travaille ça. Est-ce que vnames devrait être un vecteur des colonnes dans le data.frame que ces noms de variables (les q01_a ...) font référence? – Michael

+0

> for (i in VNAMES) { + UNCA [, la pâte (i, ".F", septembre = '')] <- facteur (UNCA [i]) Erreur: entrée inattendue: "for (i in vnames) { ¬" – Michael

+0

@ user335897 Une erreur s'est produite dans mon code. J'ai oublié d'ajouter "value = TRUE" à l'instruction grep, ce qui nous donnait les numéros de colonne au lieu des noms. Devrait fonctionner maintenant. –

1

Il semblerait que vous commenciez juste ici, donc un conseil général. Afin de travailler avec la solution fournie, il serait sage de le déballer. noms (dnow) a un résultat, regardez-le par lui-même. grep ("^ q01 [a-m]", names (dnow)) a aussi un résultat que vous devriez regarder seul. Ceux-ci pourraient tous avoir été sur des lignes différentes et sauvegardés dans des variables supplémentaires au cas où vous en auriez besoin pour le rendre plus lisible.

Questions connexes