如何将分组统计结果转换为各ATT_ID下CAR="B"的占比表格?
计算各ATT_ID维度下CAR="B"的占比表格
初始统计代码与结果
生成初始分组统计的代码如下:
JH %>% group_by(ATT_ID, CAR=="B") %>% summarize(count = n(), .groups = "drop")
运行后得到初始表格:
| ATT_ID | CAR == "B" | Count |
|---|---|---|
| ONE | FALSE | 1 |
| TWO | TRUE | 1 |
| THREE | TRUE | 3 |
| THREE | FALSE | 5 |
| FOUR | FALSE | 2 |
| FIVE | TRUE | 4 |
| SIX | TRUE | 8 |
| SIX | FALSE | 4 |
需求说明
需要将上述表格转换为按ATT_ID分组的占比表格,计算每个ATT_ID下CAR="B"(即CAR == "B"为TRUE的记录)的占比,以百分比形式展示,占比需基于每个ATT_ID的总记录数计算。
解决方案代码
可以直接基于原数据集计算,无需先生成初始统计表格,代码更简洁:
library(dplyr) library(scales) JH %>% group_by(ATT_ID) %>% summarize(`Percentage of "B"` = percent(mean(CAR == "B"), accuracy = ifelse(mean(CAR == "B") %% 0.1 == 0, 1, 0.1)))
如果需要基于已生成的初始统计表格(假设已保存为initial_table)转换,可使用以下代码:
initial_table %>% group_by(ATT_ID) %>% mutate(total_count = sum(count)) %>% filter(`CAR == "B"` == TRUE) %>% mutate(`Percentage of "B"` = percent(count / total_count, accuracy = ifelse((count/total_count) %% 0.1 == 0, 1, 0.1))) %>% select(ATT_ID, `Percentage of "B"`)
最终结果
运行代码后得到目标格式的表格:
| ATT_ID | Percentage of "B" |
|---|---|
| ONE | 0% |
| TWO | 100% |
| THREE | 37.5% |
| FOUR | 0% |
| FIVE | 100% |
| SIX | 67% |
注:accuracy参数用于控制百分比的小数位数,确保结果与示例匹配(如SIX的占比为8/(8+4)≈66.7%,保留整数为67%)。
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

