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

如何判断分组内所有评分者的评分列是否一致?

问题描述

我有一个dataframe,每行代表一个项目组从三位评分者(advisor、mentor、other)处获得的评分。列ELA1、ELA2、MATH1、MATH2、ESS1、ESS2为可评分项,每组仅需被评定3项,但同组的三位评分者应评定相同的项目。需要检查同组内所有评分者是否评定了相同的项目集,并生成一个虚拟变量标记该组的评分者是否评定了相同的项目集。

示例数据如下:

df <- data.frame(group=c("A","A","A","B","B","B","C","C","C"),
                 rater=c("Advisor", "Mentor", "Other", "Advisor", "Mentor", "Other", "Advisor", "Mentor", "Other"),
                 ELA1=c(1, 2, 2, NA, NA, 1, NA, NA, NA),
                 ELA2=c(NA, NA, NA, 2, NA, 1, NA, NA, NA),
                 MATH1=c(3, 3, 2, NA, 2, NA, 3, 3, 2),
                 MATH2=c(2, 3, 2, NA, NA, 1, 3, 3, 1),
                 ESS1=c(NA, NA, NA, 2, 2, NA, 3, 3, 1),
                 ESS2=c(NA, NA, NA, 2, 2, NA, NA, NA, NA))

示例中,A组和C组的三位评分者评定了相同的项目,而B组的评分者评定的项目集不一致,需要编写R代码识别此类不一致情况并生成指示列。

解决方案

核心思路是:先提取每个评分者实际评定的项目集,再按组检查所有评分者的项目集是否完全一致,最终生成一致性标记列。

步骤1:提取每个评分者的评定项目集

逐行筛选出非NA的评分列,将列名排序后拼接成字符串(避免列名顺序差异导致误判),作为该评分者的项目标识。

步骤2:按组验证一致性

对每个组,统计组内不同项目标识的数量,若数量为1则说明组内评分者的项目集一致,反之则不一致。

完整代码

library(dplyr)
library(purrr)

# 提取每行的评定项目集并格式化
df_processed <- df %>%
  rowwise() %>%
  mutate(assessed_items = paste(sort(names(.)[!is.na(c_across(ELA1:ESS2))]), collapse = ",")) %>%
  ungroup()

# 按组生成一致性标记列
df_result <- df_processed %>%
  group_by(group) %>%
  mutate(consistent = as.integer(n_distinct(assessed_items) == 1)) %>%
  ungroup()

# 查看结果
print(df_result)

代码说明

  1. rowwise() + c_across(ELA1:ESS2):逐行处理所有评分列的数据。
  2. names(.)[!is.na(...)]:筛选出当前行非NA的评分列名,即该评分者实际评定的项目。
  3. sort() + paste(..., collapse=","):对列名排序后拼接成统一格式的字符串,确保同一项目集无论列名顺序如何都能被识别为相同标识。
  4. group_by(group) + n_distinct(assessed_items):按组统计不同项目标识的数量,若数量为1则标记consistent为1(一致),否则为0(不一致)。

结果验证

运行代码后,df_result中的consistent列会准确标记每组的一致性:

  • A组、C组的consistent值为1(项目集一致)
  • B组的consistent值为0(项目集不一致)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:27:25