[RÉSOLU] Sum sélectif par groupes et par colonnes

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

Mary Robles
Messages : 4
Enregistré le : 20 Fév 2018, 23:41

[RÉSOLU] Sum sélectif par groupes et par colonnes

Messagepar Mary Robles » 24 Fév 2018, 00:39

Bonjour,

Je travaille sur R dans le cadre d’un projet, cependant je bloque à un endroit, j’aurais besoin d’aide.

Mes données :

J’ai un tableau, nommé fire, qui contient :
- Year : les années
- X18, X191… : les sites étudiés
NA : pas d’enregistrement
1 : un enregistrement mais pas de feux
5 : un enregistrement et un feu
- bins : des groupes tous les 50 ans ont été formés (de 1 à 8 pour mon tableau)

Je vous en mets une partie, pour que vous ayez un aperçu de la forme :

Code : Tout sélectionner

   Year X49 X5 X55 X56 X58 X6 X60 X63 X65 X66 X67 X68 X7 X70 X71 X72 X73 X76 bins
2  1576  NA NA  NA  NA   1 NA  NA  NA  NA  NA  NA  NA NA  NA  NA  NA  NA  NA    1
3  1577  NA NA  NA  NA   1 NA  NA  NA  NA  NA  NA  NA NA  NA  NA  NA  NA  NA    1
4  1578  NA NA  NA  NA   1 NA  NA  NA  NA  NA  NA  NA NA  NA  NA  NA  NA  NA    1
5  1579  NA NA  NA  NA   1 NA  NA  NA  NA  NA  NA  NA NA  NA  NA  NA  NA  NA    1
6  1580  NA NA  NA  NA   1 NA  NA  NA  NA  NA  NA  NA NA  NA  NA  NA  NA  NA    1
16 1590  NA NA  NA  NA   1 NA  NA  NA  NA  NA  NA  NA NA  NA  NA  NA  NA  NA    1
17 1591  NA NA  NA  NA   1 NA  NA  NA  NA  NA  NA  NA NA  NA  NA  NA  NA  NA    1
18 1592  NA NA  NA  NA   1 NA  NA  NA  NA  NA  NA  NA NA  NA  NA  NA  NA  NA    1
19 1593  NA NA  NA  NA   1 NA  NA  NA  NA  NA  NA  NA NA  NA  NA  NA  NA  NA    1
20 1594  NA NA  NA  NA   1 NA  NA  NA  NA  NA  NA  NA NA  NA  NA  NA  NA  NA    1
21 1595  NA NA  NA  NA   1 NA  NA  NA  NA  NA  NA  NA NA  NA  NA  NA  NA  NA    1
22 1596  NA NA  NA  NA   5 NA  NA  NA  NA  NA  NA  NA NA  NA  NA  NA  NA  NA    1
23 1597  NA NA  NA  NA   1 NA  NA  NA  NA  NA  NA  NA NA  NA  NA  NA  NA  NA    1
24 1598  NA NA  NA  NA   1 NA  NA  NA  NA  NA  NA  NA NA  NA  NA  NA  NA  NA    1
25 1599  NA NA  NA  NA   1 NA  NA  NA  NA  NA  NA  NA NA  NA  NA  NA  NA  NA    1
26 1600  NA NA  NA  NA   1 NA  NA  NA  NA  NA  NA  NA NA  NA  NA  NA  NA  NA    1


Ce que j’aimerais faire :

Pour chaque site, s’il y a au moins 25 ans d’enregistrement (et donc au maximum 24 NA) par groupe d’âge (bins), on calcule le nombre de feux (correspondant au chiffre 5) divisé par le nombre d’années d’enregistrement.
Je pense que je suis sur la bonne voie pour le script mais j’ai toujours des erreurs, je vous le mets.

Le script :

Code : Tout sélectionner

r <- data.frame (matrix(nrow=8,ncol=ncol(fire)))
colnames(r) <- colnames(fire)

for (i in 1:max(fire$bins)) {
  bin = fire[which(fire$bins == i),]
  Sum_na <- aggregate(.~bins, data = fire, FUN=function(x) {(sum(is.na(x)))}, na.action=NULL)
  r[i,] <- ifelse(Sum_na<25 & Sum_na>0, colSums(fire == 5, na.rm=T)/colSums(fire>=0,na.rm=T), NA)
}


Merci d’avance !!

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

Re: Sum sélectif par groupes et par colonnes

Messagepar Pierre-Yves Berrard » 24 Fév 2018, 10:51

Bonjour,

Ce n'était pas très loin, une proposition :

Code : Tout sélectionner

prop_fire <- function(x, seuil = 25) {
  if (sum(!is.na(x)) >= seuil) {
    mean(x == 5, na.rm = TRUE)
  } else {
    NA
  }
}

aggregate(
  . ~ bins,
  data = subset(fire, select = -Year),
  na.action = NULL,
  FUN = prop_fire,
  seuil = 10 # (car l'exemple n'a que 16 lignes, sinon 25)
)
PY

Mary Robles
Messages : 4
Enregistré le : 20 Fév 2018, 23:41

Re: Sum sélectif par groupes et par colonnes

Messagepar Mary Robles » 24 Fév 2018, 19:29

Merci pour votre réponse, ça fonctionne !
J'ai juste remplacé mean, par le calcul que je voulais faire.
Bonne soirée :)


Retourner vers « Questions en cours »

Qui est en ligne

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

cron