Création de dataframe avec une boucle for

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Charles Marcucci
Messages : 52
Enregistré le : 13 Juil 2016, 09:00

Création de dataframe avec une boucle for

Messagepar Charles Marcucci » 02 Aoû 2017, 10:13

Bonjour

J'ai une suite de fichier qui ce nomme Jade_AAAAMMJJ.TXT et j'ai besoins de cree 56 data base à partir de ces fichiers.
A la main je trouve ça long donc j'ai cree le bout de code suivant

Code : Tout sélectionner

### on cree la liste des dates qui nous interessent
for (i in 1:29){
date_2[i]<-as.character(as.Date("30/12/2015", format = "%d/%m/%Y")+(i*7))
}
date_2<-date_2[-28]

### on cree les data frame en boucle

for (i in 1:28)
{
  mois<-substr(date_2[i],6,7)
  jours<-substr(date_2[i],9,10)
  paste("Jade",mois,jours,sep="_")<-read.csv2(paste("2016\\Jade_2016",mois,jours,".TXT",sep=""))
}


J'ai essayer de créer mon objet dataframe avec une boucle mais je n'y arrive pas.

Ma question est donc comment faire avec une fonction paste pour avoir un objet data.frame dans le quel je mettrai la lecture de mon fichier?

Merci d'avance

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: Création de dataframe avec une boucle for

Messagepar Eric Casellas » 02 Aoû 2017, 10:27

Bonjour,

regarde du coté de la fonction assign

exemple de la doc :

Code : Tout sélectionner

for(i in 1:6) { #-- Create objects  'r.1', 'r.2', ... 'r.6' --
    nam <- paste("r", i, sep = ".")
    assign(nam, 1:i)
}
Eric

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Création de dataframe avec une boucle for

Messagepar Pierre-Yves Berrard » 02 Aoû 2017, 10:30

Salut,

Il faut utiliser la fonction assign.

As-tu songé à stocker tes 56 data.frame dans une liste, plutôt que dans l'environnement global ?
Si tu as les noms de fichiers dans un vecteur, tu peux créer la liste en une instruction :

Code : Tout sélectionner

jade <- lapply(noms_fich, read.csv2)

Après avoir donné un nom aux éléments de la liste, tu peux y accéder comme ceci :

Code : Tout sélectionner

jade[["20160101"]]
PY

Charles Marcucci
Messages : 52
Enregistré le : 13 Juil 2016, 09:00

Re: Création de dataframe avec une boucle for

Messagepar Charles Marcucci » 02 Aoû 2017, 10:33

du coup mon code devient

Code : Tout sélectionner

### on cree la liste des dates qui nous interessent
for (i in 1:29){
date_2[i]<-as.character(as.Date("30/12/2015", format = "%d/%m/%Y")+(i*7))
}
date_2<-date_2[-28]


### on cree les data frame en boucle
for (i in 1:28)
{
  mois<-substr(date_2[i],6,7)
  jours<-substr(date_2[i],9,10)
  nom<-paste("Jade",mois,jours,sep="_")
  assign(nom,read.csv2(paste("2016\\Jade_2016",mois,jours,".TXT",sep="")))
}


et ça fonctionne merci beaucoup Eric Casellas

[Edit]
merci Pierre-Yves Berrard pour tes conseils.
Je suis pas forcement à l'aise avec une liste
j'ai pas trop l'habitude de manipuler ce genre d'objet


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité