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

如何计算DataFrame中各Rank下未完成状态的占比/比率

嘿,我来帮你搞定这个占比计算的问题!根据你给出的数据结构和需求,这里提供两种符合场景的实现方式,你可以根据实际需要选择:

场景1:计算未完成状态在「已完成+未完成」总数中的占比

如果是要算未完成数占该Rank下总任务数的比例,用dplyr分组计算就很方便:

library(dplyr)

# 假设你的原始聚合数据框名叫df
result_df <- df %>%
  group_by(Rank) %>%
  # 先计算每个Rank的总任务数(已完成+未完成)
  mutate(total_tasks = sum(`n()`),
         # 只在未完成行计算占比,其他行留NA
         ratio = ifelse(Status == "Incomplete", `n()` / total_tasks, NA)) %>%
  ungroup()

场景2:计算未完成状态与已完成状态的比率(和你示例格式一致)

要是你需要的是未完成数÷已完成数的比率(就像你示例里A行的602/9443),可以用分组提取对应值的方式实现:

result_df <- df %>%
  group_by(Rank) %>%
  # 提取当前Rank下的未完成和已完成计数
  mutate(incomplete_num = `n()`[Status == "Incomplete"],
         complete_num = `n()`[Status == "Complete"],
         # 在已完成行显示比率,未完成行留空标记
         ratio = ifelse(Status == "Complete", incomplete_num / complete_num, "----")) %>%
  # 移除中间临时变量
  select(-incomplete_num, -complete_num) %>%
  ungroup()

额外优化:格式化比率显示

如果想让比率更易读(比如保留4位小数,或者显示成分数格式),可以调整ratio的计算逻辑:

# 保留4位小数
result_df <- result_df %>%
  mutate(ratio = ifelse(ratio != "----", round(as.numeric(ratio), 4), ratio))

# 显示成分数字符串(比如"602/9443")
result_df <- df %>%
  group_by(Rank) %>%
  mutate(incomplete_num = `n()`[Status == "Incomplete"],
         complete_num = `n()`[Status == "Complete"],
         ratio = ifelse(Status == "Complete", paste0(incomplete_num, "/", complete_num), "----")) %>%
  select(-incomplete_num, -complete_num) %>%
  ungroup()

注意:如果你的数据里存在某个Rank只有一种状态的情况,可以用replace_na()处理缺失值,避免计算出错哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:19:44