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

在R语言中用group_by计算分组内Ratio>1记录的占比问题

问题解决:按Scenario分组计算Ratio>1的记录占比

错误原因分析

你代码里的nrow(pass)是核心问题:pass是单个列向量,nrow()仅适用于数据框或矩阵,对向量调用会返回NULL,导致计算逻辑失效,最终得到空tibble。分组场景下,获取每组观测数应该用dplyr内置的n()函数,它会自动匹配当前分组的行数。

修正后的代码(保留pass列的写法)

library(dplyr)

# 原添加pass列的代码无需修改
df$pass = with(df, ifelse(Ratio>1, 1, 0))

# 修正分组统计逻辑
df_pct <- df %>% 
  group_by(Scenario) %>% 
  summarise(pass_pct = sum(pass)/n())

更优实现(无需额外添加pass列)

完全不用提前创建pass列,利用R中逻辑值自动转为1(TRUE)和0(FALSE)的特性,直接用mean()计算占比,代码更简洁高效:

library(dplyr)

df_pct <- df %>% 
  group_by(Scenario) %>% 
  summarise(pass_pct = mean(Ratio > 1))

如果需要将结果转为百分比格式(比如保留一位小数),可以补充处理:

df_pct <- df %>% 
  group_by(Scenario) %>% 
  summarise(pass_pct = scales::percent(mean(Ratio > 1), accuracy = 0.1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:58:10