计算各外科专科手术取消均值遇异常结果求助
解决手术取消均值计算异常问题
问题根源
你的数据集是已汇总的分组统计数据,每一行对应某个专科(Service)下「取消/未取消」的手术数量(n列),而非单条手术记录的状态。你当前的代码没有利用n列的计数权重,错误地将每一行视为同等权重的样本,导致计算出的是「行的比例」而非「实际手术的比例」。
比如专科"C"有2行数据:取消338例、未取消38例,总手术数376例。你的代码会计算mean(c(TRUE, FALSE))*100=50%,但实际取消率应该是338/(338+38)*100≈89.89%,这就是结果异常的核心原因。
正确代码实现
方法1:先统计总数再计算比例
dt.1 <- dt %>% group_by(Service) %>% summarise( 总手术数 = sum(n), 取消手术数 = sum(n[binary == "Cancelled"]), 取消率 = (取消手术数 / 总手术数) * 100, 未取消率 = 100 - 取消率 ) %>% select(Service, 取消率, 未取消率) # 按需保留列
方法2:用加权平均直接计算
dt.1 <- dt %>% group_by(Service) %>% summarise( 取消率 = weighted.mean(binary == "Cancelled", w = n) * 100, 未取消率 = weighted.mean(binary == "Not Cancelled", w = n) * 100 )
两种方法都能得到符合实际的百分比结果,比如专科"C"的取消率约为89.89%,未取消率约为10.11%,完全匹配数据中的真实比例。
内容的提问来源于stack exchange,提问作者user16368421
相关产品推荐
相关产品推荐

