Calcul de moyennes

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

Cyrielle Jac
Messages : 55
Enregistré le : 13 Mar 2017, 08:30

Calcul de moyennes

Messagepar Cyrielle Jac » 13 Mar 2017, 10:11

Bonjour,

J'ai un tableau assez complexe composé de 4 colonnes. La première contenant le numéro de mes stations, la seconde mon numéro de rotation (en sachant qu'il y a 3 rotations par station), la troisième contenant le nom des espèces et la dernière le nombre d'individus (pour chaque espèce).

Je souhaiterais calculer le nombre d'individus moyen par rotation pour chaque espèce et chaque station.
J'ai pensé faire des boucles imbriquées mais étant novice en R, je n'y suis pas arrivée.
Pouvez-vous m'aider?

Bonne journée

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

Re: Calcul de moyennes

Messagepar Pierre-Yves Berrard » 13 Mar 2017, 10:23

Bonjour,

Vous devriez trouver quelques réponses dans un sujet très similaire : viewtopic.php?t=8357
PY

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Calcul de moyennes

Messagepar Logez Maxime » 13 Mar 2017, 10:36

Bonjour,

Avec plus d'un facteur une des possibilités est d'utiliser les fonctions du package dplyr :

Code : Tout sélectionner

# si tes données sont dans un data.frame appelé tab
tab %>% group_by(Stations, rotations, espece) %>% summarise(Moyenne = mean(individus))
Cordialement,
Maxime

Cyrielle Jac
Messages : 55
Enregistré le : 13 Mar 2017, 08:30

Re: Calcul de moyennes

Messagepar Cyrielle Jac » 13 Mar 2017, 10:54

Merci pour votre réponse.

Ayant plusieurs comptages d'individu dans chaque rotation, je dois déjà ajouté tous les individus de la même espèce comptée dans la même rotation pour chaque station. J'ai donc pensé a appliquer la fonction tapply :
essai <- tapply(data2$analyses5m.indvs_5m, list(data2$analyses5m.identifiant, data2$analyses5m.Rotation),sum)

Cependant je n'arrive pas à ajouter une info supplémentaire comme mon nom de station. Ainsi ce code me fait bien une somme par rotation et par espèce mais pour toutes les stations confondues.... Le but de mon travail étant de différencier plusieurs habitats cela n'est pas bon.
Pouvez-vous m'aider?

Bonne journée

Cyrielle

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

Re: Calcul de moyennes

Messagepar Pierre-Yves Berrard » 13 Mar 2017, 11:49

Cyrielle Jac a écrit :tapply(data2$analyses5m.indvs_5m, list(data2$analyses5m.identifiant, data2$analyses5m.Rotation), sum)
[...]
Ainsi ce code me fait bien une somme par rotation et par espèce mais pour toutes les stations confondues....

Le code fait précisément ce que vous lui demandez. Il faut ajouter le vecteur data2$analyses5m.station à la liste en paramètre de tapply.
PY

Cyrielle Jac
Messages : 55
Enregistré le : 13 Mar 2017, 08:30

Re: Calcul de moyennes

Messagepar Cyrielle Jac » 13 Mar 2017, 11:55

Oui c'est ce que j'ai fait :
essai <- tapply(data2$analyses5m.indvs_5m, list(data2$analyses5m.Nom_du_point,data2$analyses5m.Rotation, data2$analyses5m.identifiant),sum)
Mais j'ai beau retourné tous les paramètres dans tous les sens, je n'obtiens pas ce que je souhaite.
En effet, j'obtiens un data frame avec en titre de colonne X1sp1, X2Sp1, X3Sp1, X1Sp2...
Or mon objectif est ensuite de faire la moyenne des trois rotations pour chaque sp et avec les X1, X2 et X3 (représentant les 3 rotations) dans le nom de mes espèces je vois pas trop comment calculer une moyenne.

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

Re: Calcul de moyennes

Messagepar Pierre-Yves Berrard » 13 Mar 2017, 12:14

Je crois que j'ai compris (j'ai du mal avec les espèces, identifants, nom du point, station...) :

Code : Tout sélectionner

tapply(
  data2$analyses5m.indvs_5m,
  list(
    data2$analyses5m.Nom_du_point,
    data2$analyses5m.identifiant),
  mean
)

L'équivalent avec le package dplyr, comme proposé par Maxime

Code : Tout sélectionner

data2 %>%
  group_by(analyses5m.Nom_du_point, analyses5m.identifiant) %>%
  summarise(Moyenne = mean(analyses5m.indvs_5m))
PY

Cyrielle Jac
Messages : 55
Enregistré le : 13 Mar 2017, 08:30

Re: Calcul de moyennes

Messagepar Cyrielle Jac » 14 Mar 2017, 10:49

Merci beaucoup, ça fonctionne parfaitement.

Maintenant j'ai donc un tableau avec 4 colonnes:
analyses5m.Nom_du_point analyses5m.identifiant d100 ecart_type100
IR160235 Arothron_nigropunctatus 1.27380 NaN
IR160235 Centropyge_multispinis 3.82140 3.6028505
IR160235 Cephalopholis_sp. 1.27380 NaN



J'ai donc pour le moment X lignes par station représentant le nombre d'espèce présente sur la station.
Or voici ce que je souhaiterais :
Arothron_nigropunctatus Centropyge_multispinis Cephalopholis_sp. .....
Nom_du_point
IR160235 1.27380 3.82140 1.27380
IR160236 0 1.27380 2.6
IR160237 0 2.6 1.27380
...

Avez vous une idée de code me permettant de faire cela?

Bonne après midi


cyrielle

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

Re: Calcul de moyennes

Messagepar Pierre-Yves Berrard » 14 Mar 2017, 12:48

Oui.

Code : Tout sélectionner

library(tidyr)
spread(data = mondataframe, key = analyses5m.identifiant, value = d100)


edit : il faut supprimer la colonne ecart_type100 avant d'exécuter spread.
PY


Retourner vers « Questions en cours »

Qui est en ligne

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

cron