我的数据框如下
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
,然后只需将Colon
对Adenoma
也为正的Endo
的数量进行分组,然后将它们彼此除以得出比例。
有更简单的方法吗?
答案 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()
当前组中的观察数。