moyenne des lignes d'une matrice

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

Elise Mostacci
Messages : 176
Enregistré le : 26 Sep 2007, 13:37

moyenne des lignes d'une matrice

Messagepar Elise Mostacci » 12 Juin 2009, 10:32

Bonjour,

J'ai une matrice

Code : Tout sélectionner

> dim(dat)
[1] 61552   297

plusieurs colonnes correspondent à la même observation (répétitions)
pat_id contient le nom des observations

Code : Tout sélectionner

s = diff(match(unique(pat_id),pat_id))
s
 4 4 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4

je veux faire les moyennes des répétitions mais je n'y arrive pas
j'ai essayé avec avedups et rowMeans
merci

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 12 Juin 2009, 12:36

Comprends pas. Nous donner un petit extrait du jeu de données (utiliser dput).
Renaud

Elise Mostacci
Messages : 176
Enregistré le : 26 Sep 2007, 13:37

Messagepar Elise Mostacci » 15 Juin 2009, 12:59

c'était ça que je cherchais!
je veux qu'il fasse les moyennes en fonction des noms.

Code : Tout sélectionner

apply(raw_JB_Stress,1,function(x) tapply(x,names_Stress ,mean))

Vincent Boulanger
Messages : 76
Enregistré le : 25 Avr 2006, 11:59

Messagepar Vincent Boulanger » 15 Juin 2009, 13:29

y a aussi moyen de faire avec la fonction "aggregate"

VB
Vincent Boulanger
Ingénieur Forestier
Doctorant Cemagref/INRA/ONCFS

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Messagepar Nicolas Péru » 16 Juin 2009, 12:30

une autre solution est rowmean() qui permet de spécifier un facteur de regroupement :)

Elise Mostacci
Messages : 176
Enregistré le : 26 Sep 2007, 13:37

Messagepar Elise Mostacci » 17 Juin 2009, 08:44

oui mais il doit être fixe?
si on choisit 4, il fera la moyenne de 4 lignes tout le temps alors que je n'ai pas forcément 4 même observations (voir 1° post), non ?

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Messagepar Nicolas Péru » 17 Juin 2009, 09:17

j'ai fait un mélange de fonction :)

C'est en fait rowsum() qui existe et qui permet donc de faire les sommes par niveau d'un facteur (quelle que soit le nombre de valeur de chaque modalité).

Bon une fois qu'on a la somme, on est pas loin de la moyenne :

Code : Tout sélectionner

rowsum(x, group)/as.numeric(table(group))


ça devrait donner les moyennes par groupe :)

En sachant que rowsum regroupe les lignes d'une matrice

exemple reproductible :

Code : Tout sélectionner

group <- as.factor(c(1,2,2,2,3,3,4,4,4,4))
A <- matrix(runif(100),10,10)
rowsum(A,group)/as.numeric(table(group))


Retourner vers « Questions en cours »

Qui est en ligne

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