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

R语言dplyr group by分组计算无法得到组内总数占比问题求助

问题核心原因

你当前的SuccessRate计算错误,根源是分组逻辑的问题:你同时按segment和t5_pass_fail两个维度做了分组,每个分组内仅包含t5_pass_fail=0或t5_pass_fail=1的单一群体,无法直接拿到对应segment分组的总人数,且原代码中SuccessRate = ((t5_pass_fail = 1)/sum(t5_pass_fail))存在赋值符号误用(应该用==做判断)的语法错误。

修复方案

只需要在分组计算子组指标前,先按segment单独分组计算每个segment的总人数,再带入后续的子组占比计算即可,完整修改后的代码如下:

Task5_Strict <- cleanuxq4 %>% 
  dplyr::select(urespid_0, segment, starts_with("t")) %>%
  # 第一步:先按segment分组,计算该分组所有用户的总人数
  group_by(segment) %>%
  mutate(segment_total = n()) %>%
  # 第二步:再按segment + t5_pass_fail双维度分组计算各子组指标
  group_by(segment, t5_pass_fail) %>%
  summarize(
    Task = "Task5",
    N = n(),
    # 这里计算的是当前t5_pass_fail群体在所属segment中的占比,t5_pass_fail=1行的结果即为你要的成功率
    SuccessRate = N / first(segment_total),
    UniquePages = mean(t5_unique_pageviews),
    Timedout_percent = sum(t5_effectiveness)/N,
    TimeonTask = mean(t5_time_task)/60,
    Clicks = mean(t5_clicks),
    Useful_raw = mean(t5_useful),
    Useful_percent = Useful_raw/7,
    UserFriendly_raw = mean(t5_user_friendly),
    UserFriendly_percent = UserFriendly_raw/7,
    Learned_raw = mean(t5_learned),
    Learned_percent = Learned_raw/7,
    Satisfied_raw = mean(t5_satisfied),
    Satisfied_percent = Satisfied_raw/7,
    Confident_raw = mean(t5_confident),
    Confident_percent = Confident_raw/7,
    Experienced_Difficulty_raw = sum(t5_exp_difficulty),
    Experienced_Difficulty_percent = Experienced_Difficulty_raw/N,
    difficulty_level_raw = mean(t5_difficulty_level, na.rm=TRUE),
    difficulty_level_percent = difficulty_level_raw/7
  )

# 你原有的转置生成宽表的逻辑可以保留
Task5_Strict <- Task5_Strict %>%
  select(Task, segment, everything())

Task5_Strict_Pivot <- as.data.frame(t(Task5_Strict))
colnames(Task5_Strict_Pivot) <- paste(Task5_Strict_Pivot[2,], Task5_Strict_Pivot[3,], sep = "_")
Task5_Strict_Pivot <- Task5_Strict_Pivot[-c(2,3),]

可选调整

  • 如果你只需要t5_pass_fail=1对应的成功率,其余行的该字段留空,可以将SuccessRate的计算逻辑修改为:
    SuccessRate = ifelse(t5_pass_fail == 1, N / first(segment_total), NA_real_)
    
  • 如果你实际要计算的是t1_pass_fail的成功率,把代码中所有对应t5的字段替换为t1即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 09:24:07