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

R语言中如何按ID计算指定选项被选中的百分比?

R按ID分组计算选项选中百分比实现方案

你之前用group_by没得到预期结果,绝大多数情况是分组后没有搭配正确的汇总统计逻辑,下面给两种可直接复用的实现方式:

方法1:tidyverse 方案(适配你已经在用的group_by语法)

首先加载tidyverse包,先构造和你场景匹配的示例数据,你可以替换成自己的真实数据:

library(tidyverse)
# 长表结构示例(每行对应1个ID的1个选项选择记录)
df <- tibble(
  ID = rep(c("A001", "A002", "A003"), each = 4),
  option = rep(c("选项1", "选项2", "选项3", "选项4"), 3),
  selected = c(1,0,1,0, 0,1,1,1, 1,1,0,0) # 1代表选中,0代表未选中
)

如果要统计每个ID下指定目标选项的选中百分比,正确写法如下:

# 替换成你需要统计的目标选项名称
target_opt <- "选项2"

pct_result <- df %>%
  group_by(ID) %>%
  summarise(
    # 计算逻辑:分组内匹配目标选项且标记为选中的数量 / 分组总记录数 * 100
    target_select_pct = sum(option == target_opt & selected == 1) / n() * 100
  )

如果你的数据是宽表结构(每个ID占1行,每个选项单独为1列,值为1/0标记选中状态),写法可以简化:

# 宽表结构示例
df_wide <- tibble(
  ID = c("A001", "A002", "A003"),
  选项1 = c(1,0,1),
  选项2 = c(0,1,1),
  选项3 = c(1,1,0),
  选项4 = c(0,1,0)
)

pct_result_wide <- df_wide %>%
  group_by(ID) %>%
  summarise(
    # 直接取目标选项列的均值乘100就是百分比
    选项2_选中百分比 = mean(`选项2`) * 100
  )

方法2:基础R方案(无需安装额外包)

不想加载第三方包的话,可以直接用基础R的aggregate函数实现分组统计:

# 长表基础R实现
target_opt <- "选项2"
pct_result_base <- aggregate(
  selected ~ ID, 
  data = df,
  FUN = function(x) {
    group_id <- parent.frame()$ID
    group_total <- length(x)
    match_idx <- which(df$ID == group_id & df$option == target_opt)
    sum(df$selected[match_idx] == 1) / group_total * 100
  }
)

常见踩坑说明

  • 单独调用group_by()不会直接输出分组计算结果,必须搭配summarise()(汇总输出每组1行结果)或mutate()(给原数据每一行追加分组计算值)才会生效,这是初学者最容易遇到的问题
  • 如果你的选中状态是文本标记(比如"是"/"否"、"选中"/"未选中"),只需要把判断条件里的selected == 1替换成对应文本匹配逻辑即可,比如selected == "是"
  • 计算百分比时注意分母要对应分组下的总样本量,不要用全表总样本量导致结果错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:01:07