répétition d'opérations sur liste de dataframes

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

Paméla Lagrange
Messages : 12
Enregistré le : 25 Jan 2012, 04:13

répétition d'opérations sur liste de dataframes

Messagepar Paméla Lagrange » 21 Déc 2018, 14:51

Bonjour,

J'aurais besoin d'être orienter sur le début d'une boucle/fonction qui me permettrait de réaliser tout un tas d'opérations de manière itérative sur plusieurs jeux de données de structure similaire.
Je pars d'un dataframe (DF) que je split suivant la variable X1 pour me donner une liste de dataframe (df) portant les noms df$'x1', df$'x2' etc...
Il me faudrait ensuite merger chacun des df avec un autre tableur pour obtenir un nouveau dataframe à vocation d'être spatialisé pour ensuite réaliser des rasters et toute une série d'opérations en cascade.
Mon script (long!) fonctionne pour le DF, mais je ne sais pas comment le transposer (boucle/fonction) sur ma liste de df et suis bloquée dès le début pour merger.

Code : Tout sélectionner

df <- split(DF, DF$X1)
new_names <- unique(DF$X1)
for (i in 1:length(df)) {
  assign(new_names[i], DF[[i]])
}
head(df)   # liste de df ok

for (i in 1:length(df)){
  df[i] <- merge(limi, df[i], by.x = "Nscan", by.y = "Nscan", all.x=F, all.y=T)
  }


J'ai lu au cours de mes recherches que les listes n'étaient pas facilement manipulables et pratiques. Peut-être suis-je déjà partie dans une mauvaise direction pour sous échantillonner mon DF initial en une liste?

Merci à vous,

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

Re: répétition d'opérations sur liste de dataframes

Messagepar Pierre-Yves Berrard » 21 Déc 2018, 15:07

Bonjour,
Paméla Lagrange a écrit :mais je ne sais pas comment le transposer (boucle/fonction) sur ma liste de df et suis bloquée dès le début pour merger.

Code : Tout sélectionner

######
for (i in 1:length(df)){
  df[i] <- merge(limi, df[i], by.x = "Nscan", by.y = "Nscan", all.x=F, all.y=T)
  }

C'est cette partie qui "bloque" ? (l'idée a l'air bonne)
Sinon, les listes sont très facilement manipulables quand on sait comment faire.
PY

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: répétition d'opérations sur liste de dataframes

Messagepar Serge Rapenne » 21 Déc 2018, 15:10

Bonjour,

A mon avis, "splitter" un data.frame est rarement une bonne idée. il est souvent plus efficace de garder toutes les données dans un même objet puis d'utiliser les fonctions comme by, tapply, aggregate ou group_by du package dplyr qui permettent de d'appliquer une fonction sur un sous ensemble du l'objet complet en fonction d'un ou plusieurs critieres

Serge

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: répétition d'opérations sur liste de dataframes

Messagepar Eric Wajnberg » 22 Déc 2018, 05:41

Un commentaire additionnel ici : J'éviterais d'appeler un dataframe "df", car df est déjà un objet de R.



Eric.

Paméla Lagrange
Messages : 12
Enregistré le : 25 Jan 2012, 04:13

Re: répétition d'opérations sur liste de dataframes

Messagepar Paméla Lagrange » 22 Déc 2018, 08:05

Bonjour,

Pour répondre à Pierre-Yves, il s'agit bien de la boucle qui ne fonctionne pas car je ne sais pas comment appeler chaque sous dataframe pour réaliser la compilation entre le tableau limi et l'ensemble des sous dataframe créés.

A Serge: je me suis tournée vite fait vers le package dplyr avant de poster mais je ne suis pas certaine que ces fonctions me permettent de faire tout ce que je veux, notamment l'aspect cartographie "en routine": spatialiser tous mes df pour les projeter sur une carte? réalisation de buffer et création de raster à partir de points (x, y) calculés suite à un merge? Il me semble qu'une boucle est plus adaptée, non?

A Eric: merci du conseil que j'applique :-) Mes dataframes ont des noms longs et insensés vue de l'extérieur, alors pour simplifier sur le forum, je les ai appelés "df".

Bon week-end


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité