在dplyr组之后获取两列之间的比例

时间:2019-02-12 06:39:11

标签: r dplyr

我的数据框如下

Endo   Proc    Adenoma  
1      Colon    Y
1      Colon    Y
1      Colon    N
2      Colon    Y
2       OGD     N
3      Colon    Y
3      Colon    N
3       OGD     N

我想找到Proc的比例,它们是冒号并且对于Adenoma具有Y,并按Endo分组。

此刻,我正在使用如下冗长的代码:

    MyColonDataAdenomaDetectionByEndoscopist <-
      dataframe[grep(".*[Aa]denom.*", dataframe[, Adenoma]),]

    MyColonDataAdenomaDetectionByEndoscopist <-
      MyColonDataAdenomaDetectionByEndoscopist %>%
      group_by_(Endo) %>%
      do(data.frame(NumAdenomas = nrow(.)))

 MyColonDataADR <-
      full_join(
        MyColonDataAdenomaDetectionByEndoscopist,
        MyColonDataColonoscopiesByEndoscopist,
        by = Endo
      )
    MyColonDataADR$PropAdenomas <-
      (MyColonDataADR$NumAdenomas / MyColonDataADR$NumColons) * 100

我确信我可以缩短这个时间。最后,我希望将其作为功能使用,以后再做一些类似的事情。

我遇到的问题是能够在一个dplyr管道中进行两个分组(我分组以查看由每个Proc完成的称为Colon的所有Endo,然后只需将ColonAdenoma也为正的Endo的数量进行分组,然后将它们彼此除以得出比例。

有更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

library(dplyr)
df %>% 
  group_by(Endo) %>% 
  summarise(Co_por=(sum(Proc=='Colon' & Adenoma=='Y')/n())*100,
            Nobs=n(),Pat_Col=sum(Proc=='Colon')) 

# A tibble: 3 x 4
    Endo Co_por  Nobs Pat_Col
   <int>  <dbl> <int>   <int>
1     1   66.7     3       3
2     2   50       2       1
3     3   33.3     3       2

来自?dplyr::n()

  

当前组中的观察数。