Les posteurs les plus actifs de la semaine
Aucun utilisateur |
Sujets les plus vus
Liste Tableau.
2 participants
Page 1 sur 1
Liste Tableau.
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:
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"
Aide SVP, merci d'avance!
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
Re: Liste Tableau.
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 :
cdlt
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)))
cdlt
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Sujets similaires
» Liste de diffusion SAS
» Créer une liste de matrices
» Traitement d'une liste de données
» Macro et liste de variable
» Manipulation de tableau
» Créer une liste de matrices
» Traitement d'une liste de données
» Macro et liste de variable
» Manipulation de tableau
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum