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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 08:44:54