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
是冒号并且有 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
将一个除以另一个以获得部分。Adenoma
Endo
有没有更简单的方法来做到这一点?
解决方案
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()
当前组中的观察数。
推荐阅读
- linux - Cron Job 电子邮件查找:缺少“-exec”参数
- javascript - 使用 AngularJS 1.7 中的组件在 NgRepeat 中正确呈现 HTML
- java - Eclipse:未调用 javax.annotation PostConstruct
- php - 在 Woocommerce 3.2+ 中使用 Hooks 更改购物车总数
- javascript - YouTube API、视频尺寸或纵横比
- java - XOR 加密包含空格的位字符串时出现问题
- jenkins-pipeline - 可以将工件从 jenkins 服务器部署到 Pivotal Cloud Foundry 吗?
- android - EditText 键入的值未在某些设备上显示
- java - 声明一个返回类型可以变化的函数
- java - 将 Docker Secrets 与 Spotify Docker 客户端一起使用