traitement de données imbriquées

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

Victor Chaumeau
Messages : 13
Enregistré le : 12 Sep 2013, 16:05

traitement de données imbriquées

Messagepar Victor Chaumeau » 08 Sep 2015, 11:55

Bonjour,

Je travaille sur des données imbriquée de ce type.

Code : Tout sélectionner


head(data)

village survey night site location  n
1     HKT      1     1    1        I 28
2     HKT      1     1    1        O 32
3     HKT      1     1    2        I 21
4     HKT      1     1    2        O 26
5     HKT      1     1    3        I 12
6     HKT      1     1    3        O 23

'data.frame':   1800 obs. of  6 variables:
 $ village : Factor w/ 4 levels "HKT","HPN","KNH",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ survey  : Factor w/ 9 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ night   : Factor w/ 5 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ site    : Factor w/ 5 levels "1","2","3","4",..: 1 1 2 2 3 3 4 4 5 5 ...
 $ location: Factor w/ 2 levels "I","O": 1 2 1 2 1 2 1 2 1 2 ...
 $ n       : int  28 32 21 26 12 23 20 23 48 67 ...
 


Je voudrais calculer la moyenne de la colonne n par village et par survey et par nuit. Pour l'instant, j'arrive assez facilement à calculer cette moyenne sur un facteur (ex: village) en utilisant la fonction tapply :

Code : Tout sélectionner

tapply(data$n,data$village,mean)
      HKT       HPN       KNH       TOT
       8.108966  9.108889  5.615556 13.066667
 


mais je n'arrive pas à combiner l'analyse sur plusieurs facteurs.

Merci d'avance pour votre aide,

Victor

Gabriel Terraz
Messages : 591
Enregistré le : 26 Sep 2011, 15:11

Re: traitement de données imbriquées

Messagepar Gabriel Terraz » 08 Sep 2015, 12:13

Salut,
L'INDEX de tapply accepte les listes (donc les dataframe) pour regrouper des facteurs.

Tu peux donc faire :

Code : Tout sélectionner

tapply(data$n, data[,1:3] ,mean)


Pour enlever les combinaisons vides tu peux faire :

Code : Tout sélectionner

tapply(data$n , do.call(paste,data[,1:3]) , mean)

Alexandre Dangléant
Messages : 270
Enregistré le : 30 Mar 2010, 14:38

Re: traitement de données imbriquées

Messagepar Alexandre Dangléant » 08 Sep 2015, 12:15

Bonjour,

Il suffit de désigner une liste de facteur dans le tapply.

Code : Tout sélectionner

tapply(data$n,list(data$survey, data$village),mean) # Par exemple


Cordialement.

EDIT : Grillé par Gabriel. Au passage je n'avais jamais pensé qu'on pouvait utiliser des data.frame dans ce contexte... c'est bon à prendre!

Navarre Julien
Messages : 367
Enregistré le : 20 Avr 2012, 08:27

Re: traitement de données imbriquées

Messagepar Navarre Julien » 08 Sep 2015, 12:36

Bonjour, pour avoir un format de données facile à manipuler pour des représentations graphiques :

Code : Tout sélectionner

library(dplyr)
datas %>%
  group_by(village, survey, night) %>%
  summarise(mean = mean(n))

library(data.table)
setDT(datas)
datas[ , list(mean = mean(n)), by = list(village, survey, night)]

Victor Chaumeau
Messages : 13
Enregistré le : 12 Sep 2013, 16:05

[Resolu] Re: traitement de données imbriquées

Messagepar Victor Chaumeau » 09 Sep 2015, 01:38

Bien noté,
Merci pour votre aide,
Victor


Retourner vers « Questions en cours »

Qui est en ligne

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