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

如何在R中按评分对象(Ratee)分组迭代修改评分者(Rater)标识以适配irr包计算评分者间信度?

解决评分者ID重命名与评分者间信度计算的问题

没问题,这个数据格式转换的需求其实很常见,用分组内生成序号的方法就能轻松搞定!下面给你几种不同的实现方式,选你习惯的R工具链来用就行:

方法一:用tidyverse/dplyr实现(推荐,代码可读性高)

如果你平时习惯用tidyverse系列包,用dplyr的分组+序号生成就能快速完成Rater重命名:

# 先加载dplyr(如果没安装先运行install.packages("dplyr"))
library(dplyr)

# 你的示例数据集(可以替换成你自己的数据集)
df <- tibble(
  Rater = c(11111, 12112, 12232, 12457, 16794, 55555, 66666, 77777, 88888, 99999),
  Ratee = c(12345, 12345, 12345, 12345, 12345, 16454, 16454, 16454, 16454, 16454),
  Rating = c(1, 1, 0, 0, 1, 0, 1, 1, 0, 1)
)

# 核心转换步骤:按Ratee分组,给每个组内的评分者生成r1/r2...的命名
df_transformed <- df %>%
  group_by(Ratee) %>%
  mutate(Rater = paste0("r", row_number())) %>%
  ungroup()

# 查看转换后的结果
print(df_transformed)

代码解释:

  • group_by(Ratee):把数据按评分对象ID分组,确保序号只在每个Ratee内部生成
  • row_number():在每个分组内生成从1开始的连续序号
  • paste0("r", row_number()):把序号和前缀"r"拼接,得到你需要的r1/r2格式
  • ungroup():取消分组状态,避免后续操作受分组影响

方法二:Base R实现(无需额外安装包)

如果你不想加载额外的包,用Base R的ave()函数也能实现相同效果:

# 直接在原数据框上修改Rater列
df$Rater <- with(df, paste0("r", ave(Rater, Ratee, FUN = function(x) seq_along(x))))

# 查看结果
print(df)

代码解释:

  • ave(Rater, Ratee, FUN = function(x) seq_along(x)):按Ratee分组,对每个组的Rater列应用seq_along()生成组内序号
  • paste0()同样负责拼接前缀"r"和序号

下一步:转换为irr包需要的宽格式

irr包的多数信度计算函数(比如kripp.alpha()、kappa2())需要宽格式数据(每个评分者一列,每个Ratee一行),你可以用tidyr的pivot_wider()完成转换:

# 加载tidyr(属于tidyverse,若未安装先运行install.packages("tidyr"))
library(tidyr)

df_wide <- df_transformed %>%
  pivot_wider(names_from = Rater, values_from = Rating)

# 查看宽格式数据(Ratee为行,r1/r2等为列)
print(df_wide)

计算评分者间信度

转换完宽格式后,就可以用irr包计算信度了,比如计算适用于多个评分者的Krippendorff's Alpha:

# 加载irr包(未安装先运行install.packages("irr"))
library(irr)

# 计算信度:排除第一列的Ratee ID,只传入评分列
kripp.alpha(df_wide[, -1])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:59:08