如何用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
相关产品推荐
相关产品推荐

