J'ai un dataframe avec des données mensuelles month
sur le parasitisme herbivore result
pour différents types d'ordre parasitoïde « de psitorder » avec des niveaux « hyménoptères » ou « diptères » . Le résultat est soit "p" pour un herbivore parasité, "a" si l'herbivore est devenu adulte, soit il n'y a pas de données "" parce que l'herbivore est mort en captivité.arguments de regroupement dans tidyverse: Bin par nombre consécutif de niveaux dans une variable avec des niveaux manquants
df<-data.frame(month= c(rep(1, each=8), rep(2, each=6),
rep(3, each=6), rep(4, each=8),
rep(5,each=6),rep(6, each=6),
rep(8,each=6),rep(9, each=6)),
result= c(rep("p",each=3),rep("a",each=3),
rep("",each=2),rep("p",each=3),rep("a",each=2),
rep("",each=1),rep("a",each=3),rep("",each=3),
rep("p",each=3),rep("a",each=3),rep("",each=2),
rep("p",each=3),rep("a",each=2),
rep("",each=1),rep("a",each=3),rep("",each=3),
rep("p",each=3),rep("a",each=3),rep("",each=2),
rep("a",each=4)),
psitorder=c(rep("Hymenoptera",each=2),
rep("Diptera",each=1),rep("",each=5),
rep("Hymenoptera",each=1),rep("Diptera",each=3),
rep("",each=2),rep("",each=6),
rep("Hymenoptera",each=2),rep("Diptera",each=1),
rep("",each=5),rep("Hymenoptera",each=1),
rep("Diptera",each=3),rep("",each=2),
rep("",each=6),rep("Hymenoptera",each=2),
rep("Diptera",each=1),rep("",each=9)))
Je voudrais groupe par la variable month
, cependant, je dois groupe par tous les 3 mois consécutifs de données. Ici, dans cet exemple, month
1,2,3 serait groupé et mois 4,5,6, et pour le mois 7,9, je devrais ajouter le mois manquant 8 de sorte que les lignes consécutives continuent d'être utilisées pour calculer psit_freq
.
Une fois groupé, je veux calculer psit_freq
en utilisant la méthode ci-dessous.
J'ai essayé:
output %>%
group_by(month+3) %>%
mutate(complete(continuous_month= seq(min(continuous_month),
max(continuous_month), 1L))%>%
summarise(hym_freq = sum(psitorder == 'Hymenoptera')/sum(result %in% c('p', 'a')),
dip_freq = sum(psitorder == 'Diptera')/sum(result %in% c('p', 'a')))
La sortie ressemblerait à ceci:
output<- data.frame(group= c("1", "2", "3"), hym_psit= c(3/14,
3/14,2/10), dip_psit= c(4/14,4/14,1/10))