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

如何用R清理评分者数据集冗余与缺失值并计算评分者一致性

数据清理与评分者一致性分析实操方案

一、数据清理

(I) 处理单评分者重复评分

对于像c('Yes', 'Yes')这种同一评分者重复提交的一致评分,我们可以写个简单函数提取唯一值。如果遇到同一评分者给出不一致的重复值(比如c('Yes','No')),可以标记出来后续处理:

library(data.table)
library(stringr)

# 清理重复评分的函数
clean_dup_rating <- function(x) {
  # 识别c(...)格式的重复评分
  if (str_detect(x, "^c\\('.*'\\)$")) {
    # 提取引号里的内容并去重
    vals <- str_remove_all(str_extract_all(x, "'(.*?)'")[[1]], "'")
    unique_vals <- unique(vals)
    # 一致就返回唯一值,不一致标记为异常
    return(if (length(unique_vals) == 1) unique_vals else "Mismatch")
  } else {
    return(x)
  }
}

# 应用到所有评分者列
rater_cols <- grep("^Rater", names(ToyData), value = TRUE)
ToyData[, (rater_cols) := lapply(.SD, clean_dup_rating), .SDcols = rater_cols]

(II) 处理空评分

把字符串"NULL"换成R原生的缺失值NA,后续计算一致性时,绝大多数统计包都会自动忽略NA,不用额外处理:

# 替换NULL为NA
ToyData[, (rater_cols) := lapply(.SD, function(x) ifelse(x == "NULL", NA, x)), .SDcols = rater_cols]

# 顺便把数值型评分转成数值类型(原数据是字符型)
# 判断哪些列可以转成数值
num_cols <- ToyData[, lapply(.SD, function(x) all(!is.na(as.numeric(x)))), .SDcols = rater_cols][, which(.SD == TRUE)]
ToyData[, (num_cols) := lapply(.SD, as.numeric), .SDcols = num_cols]

二、其他问题解答

A. 评分者一致性方法选择

分两类情况选:

  • 分类评分(Yes/No这类):2个评分者用Cohen's Kappa;3个及以上用Fleiss' Kappa,它支持不同项目有不同数量评分者的场景。
  • 数值型评分:r_WG(J)适合衡量同一项目下评分者的内部一致性;ICC(组内相关系数)也很合适,不仅支持可变数量的评分者,还能区分“一致性”和“绝对一致性”两种场景。
  • 混合类型的话,建议把分类和数值评分分开,分别计算对应的指标。

B. 数据格式调整

必须转成长格式,这是绝大多数统计函数的标准输入格式,用data.table的melt函数就能搞定:

# 宽转长,自动去掉NA
long_data <- melt(ToyData, id.vars = "Session_Item", 
                  variable.name = "Rater", value.name = "Rating", 
                  na.rm = TRUE)

转完之后每行对应一个「项目-评分者-评分」的组合,不管后续计算哪种一致性指标,都能方便分组处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:40:38