过滤数据并计算子集,输出取决于排除的数据

时间:2017-10-12 22:58:24

标签: r tidyverse

我有一个数据框,其中关于草食动物寄生month的月度数据result用于各种类型的寄生虫命令'psitorder',其水平为“膜翅目”或“双翅目”。 result对于寄生的食草动物来说是“p”,如果草食动物成长为“a”,或者没有数据,因为草食动物在圈养中死亡。

  df<-data.frame(month= c(rep(1, each=8), rep(2, each=6), 
      rep(3, 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)),
      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)))

我需要两个独立的数据框,分别针对psit_freq的每个级别计算每个月子集的寄生百分比psitorder

我试过了:

Hymenoptera_output<- 
  df  
  filter(psitorder!= "Diptera")%>%
  group_by(continuous_month)%>%
  summarise(psit_freq = sum(result == "psit")/sum(result== 
 "adult",result == "psit"))

Diptera_output<- 
  df  
  filter(psitorder!= "Hymenoptera")%>%
  group_by(continuous_month)%>%
  summarise(psit_freq = sum(result == "psit")/sum(result== 
 "adult",result == "psit"))

我没有得到正确的输出。输出不包括正确计算psit_freq所需的非膜翅目或双翅目数据。

我需要输出显示如下:

Hymenoptera_output<- data.frame(month= c(1,2,3), psit_freq= c(2/6, 
 1/5, 0))
Diptera_output<- data.frame(month= c(1,2,3), psit_freq= c(1/6, 
 3/5, 0))

Hymenoptera_output

#  month psit_freq
#1     1 0.3333333
#2     2 0.2000000
#3     3 0.0000000

Diptera_output

#  month psit_freq
#1     1 0.1666667
#2     2 0.6000000
#3     3 0.0000000

1 个答案:

答案 0 :(得分:1)

似乎你需要:

df %>% 
    group_by(month) %>% 
    summarise(hym_freq = sum(psitorder == 'Hymenoptera')/sum(result %in% c('p', 'a')), 
              dip_freq = sum(psitorder == 'Diptera')/sum(result %in% c('p', 'a')))

# A tibble: 3 x 3
#  month  hym_freq  dip_freq
#  <dbl>     <dbl>     <dbl>
#1     1 0.3333333 0.1666667
#2     2 0.2000000 0.6000000
#3     3 0.0000000 0.0000000