R语言中如何基于分类列将字符转换为数值并分组计算项目平均占比
实现逻辑与代码
之前的代码存在两个核心问题:
- 未按
project维度分组,直接对全量数据统计Q1分布,结果无法关联对应项目- 仅处理了Q1的筛选逻辑,未覆盖Q2的Top2Box统计规则
统计规则定义
本次采用Top2Box统计口径,各问题的成功项定义如下:
- Q1:
"Very likely"、"Likely" - Q2:
"Very easy"、"Easy"
字符响应转数值逻辑
将每个字符型响应与对应问题的成功项匹配,直接二值化为数值变量:
- 匹配成功:转为
1(代表符合成功项要求) - 匹配失败:转为
0(代表不符合成功项要求)
后续即可基于二值变量做分组求平均计算。
可运行实现代码
# 加载依赖包 library(dplyr) # 定义各问题的Top2Box成功项映射 top2_map <- list( Q1 = c("Very likely", "Likely"), Q2 = c("Very easy", "Easy") ) # 分组计算统计结果 result <- masterdf %>% # 按项目维度分组 group_by(project) %>% # 计算每个问题的Top2Box占比(二值变量均值即为成功占比) summarise( Q1 = mean(Q1 %in% top2_map$Q1) * 100, Q2 = mean(Q2 %in% top2_map$Q2) * 100 ) %>% # 对齐输出表列名要求 rename(Project = project) %>% # 格式化为带%符号的字符串,如需保留纯数值可删除此段 mutate( Q1 = paste0(round(Q1), "%"), Q2 = paste0(round(Q2), "%") )
输出结果说明
运行代码后,result对象即为符合要求结构的输出表,你提供的示例输入数据对应的实际计算结果为:
| Project | Q1 | Q2 |
|---|---|---|
| ProjA | 50% | 100% |
| ProjB | 50% | 0% |
| ProjC | 100% | 100% |
(注:你给出的示例输出表为结构参考,实际数值由输入数据计算得出)
内容的提问来源于stack exchange,提问作者Delly
相关产品推荐
相关产品推荐

