R语言:将irr包kappa分析的列表结果转为结构化DataFrame
解决irr包kappa结果列表转结构化DataFrame的方案
核心思路
先给kappa_per_item列表的每个元素匹配对应项目名,再批量提取每个kappa结果的关键字段,最后合并为结构化DataFrame。
步骤1:给列表元素命名(关键前提)
如果你的kappa_per_item还没有项目标识,先根据项目顺序给列表元素添加名称:
# 假设20个项目名为item1到item20,可替换为实际项目名 names(kappa_per_item) <- paste0("item", 1:20)
步骤2:用tidyverse工具转换(推荐)
加载tidyverse包,用map_df批量提取信息并自动合并:
library(tidyverse) library(irr) # 提取指定字段并生成DataFrame kappa_df <- map_df(kappa_per_item, function(res) { tibble( method = res$method, # kappa方法类型(如Cohen's Kappa) subjects = res$subjects, # 受试者数量 raters = res$raters, # 评分者数量 kappa_value = res$value, # kappa值 p_value = res$p.value, # 显著性p值 ci_lower = res$conf.int[1], # 置信区间下限 ci_upper = res$conf.int[2] # 置信区间上限 ) }, .id = "item") # .id参数自动将列表元素名转为item列
步骤3:Base R替代方案(无需tidyverse)
如果不想依赖tidyverse,用基础R函数也能实现:
# 逐个提取每个kappa结果的信息 kappa_list <- lapply(kappa_per_item, function(res) { data.frame( method = res$method, subjects = res$subjects, raters = res$raters, kappa_value = res$value, p_value = res$p.value, ci_lower = res$conf.int[1], ci_upper = res$conf.int[2], stringsAsFactors = FALSE ) }) # 给每个子数据框添加item列 for (i in seq_along(kappa_list)) { kappa_list[[i]]$item <- names(kappa_per_item)[i] } # 合并为最终DataFrame kappa_df_base <- do.call(rbind, kappa_list)
补充说明
- 可通过
str(kappa_per_item[[1]])查看kappa2结果的所有可用字段,按需调整提取内容; - 如果项目有自定义名称,将
names(kappa_per_item)替换为你的实际项目名向量即可。
内容的提问来源于stack exchange,提问作者user21538383
相关产品推荐
相关产品推荐

