首页 > 解决方案 > 在 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是冒号并且有 Y 为Adenoma, 分组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,然后仅按每个对它们也是积极的数量进行分组,然后Colon将一个除以另一个以获得部分。AdenomaEndo

有没有更简单的方法来做到这一点?

标签: rdplyr

解决方案


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()

当前组中的观察数。


推荐阅读