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

R语言按col_id分组计算col_assessment列值一致性占比实现方法

R分组计算评估值一致性占比的解决方案

问题排查

现有代码存在两处错误:

  • 自定义compute_ICR函数逻辑错误:传入的coding_values是向量类型,nrow()对向量返回空值,导致分母计算失败,需要替换为length()获取向量总长度
  • 分组调用语法错误:summarize中写df$col_assessment会提取整个数据框的全量列,不会按分组取子集,直接写列名col_assessment即可

注:你提供的示例数据中id=2的评估值为Neu、Neg、Neu,最多值出现2次,实际计算得占比为0.6667,和你给出的期望输出中id=2占比为1不符,属于示例数据笔误,调整id=2的三个评估值为相同即可得到占比1的结果。

修正后的方案

方案1:沿用自定义函数的写法

library(dplyr)
library(magrittr)

# 示例数据
df <- data.frame(col_id = c(1, 1, 1, 2, 2, 2, 3, 3, 3), 
                 col_assessment = c("Pos", "Pos", "Neu", "Neu", "Neg", "Neu", "Pos", "Neu", "Neg"))

# 修正后的自定义函数
compute_ICR <- function(coding_values){
  most_common_value <- coding_values %>% 
    table() %>% 
    sort(decreasing = TRUE) %>% 
    extract(1) %>% 
    names()
  share_accordance <- length(which(coding_values == most_common_value)) / length(coding_values)
  return(share_accordance)
}

# 分组调用计算
result <- df %>% 
  group_by(col_id) %>% 
  summarize(share_accordance = compute_ICR(col_assessment))

运行后输出结果:

# A tibble: 3 × 2
  col_id share_accordance
   <dbl>            <dbl>
1      1            0.667
2      2            0.667
3      3            0.333

方案2:无需自定义函数的简洁写法

直接用dplyr自带函数分组计数后计算,运行效率更高:

result <- df %>% 
  group_by(col_id, col_assessment) %>% 
  count() %>% 
  group_by(col_id) %>% 
  summarize(share_accordance = max(n)/sum(n))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:24:01