Forum de Statistiques
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Les posteurs les plus actifs de la semaine
Aucun utilisateur

Le deal à ne pas rater :
Réassort du coffret Pokémon 151 Électhor-ex : où l’acheter ?
Voir le deal

Liste Tableau.

2 participants

Aller en bas

Liste Tableau. Empty Liste Tableau.

Message par FMarwen Jeu 15 Mai 2014 - 13:42

Bonjour,

Je travaille sur un ensemble des tableaux (tab1,tab2,....,tab30), je voudrais calculer la moyenne des trois plus grosses valeurs d'un case donné, j'ai arrivé à écrire le programme pour un seul tableau et ça fonctionne, comme il montre le code suivant:

Code:

j<-1
i<-1
repeat{                       
  a<-tab1$Diam[tab1$PA==i]               
  c<-sort(a,decreasing=T)   

    moy<-mean(c[1:3])   
    while (tab1[j,2] == i) { tab1[j,7]<-moy
                            j<-j+1   
  }

  if (i>43) break
  i<-i+1
}

Ma question est est ce que possible d'ajouter une boucle pour refaire le même code sur les 30 tableaux?
jai essayé avec ce code, mais ça marche pas m'affiche toujours un message d'erreur "Erreur dans x$Diam : $ operator is invalid for atomic vectors"

Code:

for(x in c("tab1","taab2",...,"tab30"))
{

j<-1
i<-1
repeat{                       
  a<-x$Diam[x$PA==i]               
  c<-sort(a,decreasing=T)   
    moy<-mean(c[1:3])   
    
 
while (x[j,2] == i) { x[j,7]<-moy
                            j<-j+1   
  }

  if (i>43) break
  i<-i+1
}
}


Aide SVP, merci d'avance!

FMarwen

Nombre de messages : 226
Date d'inscription : 17/04/2013

Revenir en haut Aller en bas

Liste Tableau. Empty Re: Liste Tableau.

Message par droopy Ven 16 Mai 2014 - 7:58

Bonjour,

tu as plusieurs façon de te simplifier la vie, voici une solution avec la librairie dplyr et une autre avec la fonction ave, sous réserve que j'ai bien compris ce que tu cherches à faire :
Code:
# avec ave :
fun <- function(x) mean(sort(x, decreasing=T)[1:3])
tab1[,7] <- ave(tab1$Diam, tab1$PA, FUN=fun)
# avec dplyr :
tab1 <- tab1%.%group_by(PA)%.%mutate(res=fun(Diam))
# pour les différents tableaux :

# avec ave :
f <- function(x) {
  x[,7] <- ave(x$Diam, x$PA, FUN=fun) # ou x <- cbind(x, ave(x$Diam, x$PA, FUN=fun))
  return(x)
  }
for (i in sprintf("tab%s", 1:30))
  assign(i, f(get(i)))

# avec dplyr :
f <- function(x) x%.%group_by(PA)%.%mutate(res=fun(Diam))
for (i in sprintf("tab%s", 1:30))
  assign(i, f(get(i)))
Essaie et dis nous.

cdlt
droopy
droopy

Nombre de messages : 1156
Date d'inscription : 04/09/2009

Revenir en haut Aller en bas

Liste Tableau. Empty Re: Liste Tableau.

Message par FMarwen Ven 16 Mai 2014 - 9:01

Merci droopy.

FMarwen

Nombre de messages : 226
Date d'inscription : 17/04/2013

Revenir en haut Aller en bas

Liste Tableau. Empty Re: Liste Tableau.

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum