2017-07-05 1 views
1

J'ai donc 1000 données à traiter en utilisant une boucle FOR dans R, disons qu'elles sont nommées DF1 à DF1000. J'ai besoin de remplacer toutes les 0 valeurs dans les trames de données à 1. J'essaie d'écrire ceci comme suit.Comment remplacer des zéros dans plusieurs données variables dans une boucle for?

for (i in 1:1000){ 
eval(as.symbol(paste0("DF","i")))[eval(as.symbol(paste0("DF","i")))==0]<-1 
} 

Cela fait apparaître une erreur ("n'a pas pu trouver eval < -"). Comment puis-je résoudre ce problème? J'ai essayé d'utiliser "assign" mais j'obtiens une erreur différente ("target of assignment s'étend à un objet non-language").

Merci à l'avance, Alvo

+1

La meilleure chose à faire est de mettre toutes les trames de données dans une 'liste', puis' lapply (liste, fonction (x) remplacer (x, x == 0, 1)) ' –

+0

merci @Rich Scriven. Une question cependant. Dites si ce n'était que la première des 10 ou 20 choses que je fais à ces 1000 données. Est-ce que cela veut dire que je devrais le faire avant les 19 autres choses, en dehors de la boucle For? – Alvo

Répondre

0

Une façon est de assign chaque valeur de caractère DF à un nouveau DF dans l'environnement mondial, en utilisant la fonction de base replace.

for (i in 1:1000){ 
     assign(paste0("DF", i), 
      replace(eval(parse(text = paste0("DF", i))), eval(parse(text = paste0("DF", i))) == 0, 1), 
      envir = .GlobalEnv) 
    } 

Ceci est similaire à replace(DF,DF == 0, 1) dehors de la boucle for.

+0

Merci @HNSKD. J'aime bien cette méthode car je peux le faire dans la même boucle. Est-ce que la personne qui a déprimé cela pourrait expliquer pourquoi elle ne devrait pas être utilisée? – Alvo