在R语言中按sub组汇总并计算完成率百分比的实现方法
按分组计算完成率的解决方案
首先是你的原始数据:
example <- data.frame( sub = c(rep(1091, 3), rep(2091,4)), completed_sessions = c(1,0,1,0,1,1,1) )
方法一:使用dplyr包(推荐,代码简洁直观)
先加载dplyr包,通过分组汇总实现需求:
library(dplyr) example_solution <- example %>% group_by(sub) %>% summarize( num_complete = sum(completed_sessions == 1), # 统计每组completed_sessions为1的数量 total_entries = n(), # 获取每组的观测总数 percent_complete = round(num_complete / total_entries * 100, 2) # 计算百分比并保留两位小数 ) %>% ungroup() # 取消分组,转为普通数据框 # 输出结果 example_solution
方法二:使用Base R(无需额外安装包)
通过aggregate函数实现分组计算:
# 分组计算num_complete和total_entries agg_result <- aggregate(completed_sessions ~ sub, data = example, FUN = function(x) { c(num_complete = sum(x == 1), total_entries = length(x)) }) # 整理成目标格式并计算百分比 example_solution_base <- data.frame( sub = agg_result$sub, num_complete = agg_result$completed_sessions[, 1], total_entries = agg_result$completed_sessions[, 2], percent_complete = round(agg_result$completed_sessions[, 1] / agg_result$completed_sessions[, 2] * 100, 2) ) # 输出结果 example_solution_base
两种方法最终都会得到你期望的输出:
example_solution <- data.frame( sub = c(1091, 2091), num_complete = c(2,3), total_entries = c(3,4), percent_complete = c(66.67, 75.00) )
内容的提问来源于stack exchange,提问作者jo_
相关产品推荐
相关产品推荐

