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

