首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对tidyverse中的参数进行分组:按缺少级别的变量中的连续级别数进行分组

对tidyverse中的参数进行分组:按缺少级别的变量中的连续级别数进行分组
EN

Stack Overflow用户
提问于 2017-10-14 13:02:05
回答 1查看 192关注 0票数 0

我有一个关于食草动物寄生虫result的每月数据帧,用于各种类型的寄生蜂目'psitorder‘,级别为“膜翅目”或“双翅目”。结果要么是"p“表示被寄生的食草动物,要么是"a”如果食草动物成长为成虫,或者没有数据"“,因为食草动物是在圈养中死亡的。

代码语言:javascript
复制
 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)))

我想按month变量进行分组,但是,我需要每隔3个月连续对数据进行分组。在本例中,month 1、2、3将被分组为月份4、5、6,对于月份7、9,我需要添加缺少的月份8,以便继续使用连续的行来计算psit_freq

分组后,我想使用下面的方法计算psit_freq

我试过了:

代码语言:javascript
复制
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')))

输出将如下所示:

代码语言:javascript
复制
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))
EN

回答 1

Stack Overflow用户

发布于 2017-10-14 13:10:32

我们使用%/%创建一个分组变量

代码语言:javascript
复制
data_frame(month = 1:9) %>% 
       full_join(., df) %>% 
       group_by(group = (month-1)%/%3 + 1) %>%
      summarise(hym_freq = sum(psitorder == 'Hymenoptera', na.rm = TRUE)/sum(result %in% c('p', 'a'), na.rm = TRUE), 
           dip_freq = sum(psitorder == 'Diptera', na.rm =TRUE)/sum(result %in% c('p', 'a'), na.rm = TRUE))
# A tibble: 3 x 3
#   group  hym_freq  dip_freq    
#    <dbl>     <dbl>     <dbl>
#1     1 0.2142857 0.2857143
#2     2 0.2142857 0.2857143
#3     3 0.2000000 0.1000000
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46741047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档