在R中使用groupby和dplyr按分组列计算比例
解决方案
你的代码核心问题是用错了获取分组行数的函数,nrow(merchantName)无法获取当前分组的观测数,以下是修正后的两种实现方式:
写法一:通过求和与计数计算比例
dt_nm %>% group_by(merchantName) %>% summarise(ratio_fraud = sum(isFraud) / n(), .groups = "drop")
写法二:利用均值直接计算(更简洁)
dt_nm %>% group_by(merchantName) %>% summarise(ratio_fraud = mean(isFraud), .groups = "drop")
关键细节说明
n():在分组后的summarise环境中,n()会返回当前分组的观测总数,这正是你需要的每组总样本量。mean(isFraud):由于isFraud是取值为0或1的二元变量,它的均值等价于1的观测数占该组总数的比例,写法更简洁且效率一致。.groups = "drop":可选参数,用于计算完成后取消数据框的分组状态,避免后续操作因残留分组逻辑出现意外结果。
针对70万条观测、1000个分组的数据集,上述dplyr操作的性能完全够用。
内容的提问来源于stack exchange,提问作者freddywit
相关产品推荐
相关产品推荐

