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

如何重构R数据框以计算评分者间信度(IRR)?

重构数据框用于评分者间信度计算

嘿,我来帮你搞定这个数据重构的问题,这可是计算评分者信度前的关键步骤!你的需求是把同一id下多名编码者的结果合并到同一行,拆分成var1/var1_coder2这类列,同时过滤掉只有单个编码者的条目对吧?

下面给你两种实用的R语言实现方法,都是用常用的tidyverse工具包:

方法一:通用型(支持2名以上编码者)

这种方法不管每个id有多少名编码者都能处理,会自动生成对应数量的编码者列:

首先加载依赖包:

library(dplyr)
library(tidyr)

然后执行数据处理:

# 给每个id内的编码者添加编号,再转宽格式
df_irr_ready <- df %>%
  # 按id分组
  group_by(id) %>%
  # 只保留有至少2名编码者的id(单个编码者的没法算信度)
  filter(n() >= 2) %>%
  # 给每个编码者分配编号:coder1、coder2...
  mutate(coder_id = paste0("coder", row_number())) %>%
  ungroup() %>%
  # 从长格式转为宽格式,把编码者编号作为列名后缀
  pivot_wider(
    id_cols = id,
    names_from = coder_id,
    values_from = c(var1, var2),
    names_sep = "_"
  )

# 查看最终结果
print(df_irr_ready)

运行后会得到你想要的格式:

# A tibble: 5 × 5
     id var1_coder1 var1_coder2 var2_coder1 var2_coder2
  <dbl> <chr>       <chr>       <chr>       <chr>      
1     2 A           A           1           1          
2     3 B           A           5           6          
3     4 C           C           2           3          
4     5 A           A           1           1          
5     6 E           E           3           3          

方法二:简化版(仅适用于最多2名编码者)

如果你确定所有待分析的id都只有2名编码者,那可以用更简洁的写法,直接提取第一个和最后一个编码者的结果:

df_irr_ready <- df %>%
  group_by(id) %>%
  filter(n() >= 2) %>%
  summarize(
    var1 = first(var1),
    var1_coder2 = last(var1),
    var2 = first(var2),
    var2_coder2 = last(var2)
  ) %>%
  ungroup()

这个方法输出的结果和上面完全一致,代码更短,但局限性是只能处理2名编码者的情况。

小提示

  • 两种方法都会自动过滤掉id=1和id=7这类只有单个编码者的条目,这些本来就没法用于信度计算。
  • 如果以后遇到有3名及以上编码者的情况,优先用方法一,它会自动生成var1_coder3这类列,扩展性更好。

内容的提问来源于stack exchange,提问作者D. Studer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:58:25