You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于分组统计结果生成各ATT_ID的CAR='B'占比表?

问题描述

我用以下代码生成了第一张统计表格:

JH %>% group_by(ATT_ID, CAR=="B") %>%
summarize(count = n(), .groups = "drop")

生成的表格如下:

ATT_IDCAR == "B"Count
ONEFALSE1
TWOTRUE1
THREETRUE3
THREEFALSE5
FOURFALSE2
FIVETRUE4
SIXTRUE8
SIXFALSE4

我希望将其转换为以下格式的表格,计算每个ATT_ID对应的CAR="B"的占比:

ATT_IDPercentage of "B"
ONE0%
TWO100%
THREE37.5%
FOUR0%
FIVE100%
SIX67%

注:部分ATT_ID同时存在FALSE和TRUE的统计行,部分仅存在其中一种,需要准确计算每个分组的占比。请问该如何实现?


解决方案

不需要先按CAR=="B"分组统计再二次处理,直接基于原数据JH按ATT_ID分组,一步就能完成占比计算与格式化:

JH %>%
  group_by(ATT_ID) %>%
  summarize(
    `Percentage of "B"` = scales::percent(mean(CAR == "B"), accuracy = 0.1)
  ) %>%
  ungroup()

代码说明:

  • mean(CAR == "B"):布尔值TRUE会被识别为1,FALSE识别为0,取均值直接得到CAR="B"的占比
  • scales::percent():将数值转换为百分比格式,accuracy=0.1用于保留一位小数;如果需要像示例中SIX那样取整数,把参数改成accuracy=1即可
  • 若不想依赖scales包,可手动计算格式化:
JH %>%
  group_by(ATT_ID) %>%
  summarize(
    `Percentage of "B"` = paste0(round(mean(CAR == "B") * 100, 1), "%")
  ) %>%
  ungroup()

如果已经生成了第一张统计表格(假设命名为summary_df),也可以基于它计算:

summary_df %>%
  group_by(ATT_ID) %>%
  summarize(
    `Percentage of "B"` = scales::percent(sum(Count[`CAR == "B"`]) / sum(Count), accuracy = 0.1)
  ) %>%
  ungroup()

内容的提问来源于stack exchange,提问作者Antonio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:05:23