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

如何拆分长格式数据集为双列测量值以适配ICC分析

R实现长格式数据滑动配对生成ICC分析数据集

你需要的滑动配对逻辑本质是按受试者分组后,取相邻两次测量值为一对,步长为1,用dplyr的窗口函数可以高效实现,哪怕十万行级数据也能秒出结果,完全适配千行以上的处理需求。


完整实现代码

# 加载dplyr包,没有安装先跑install.packages("dplyr")
library(dplyr)

# 示例数据
set.seed(1)
df <- data.frame(id = c(rep(1, 5), rep(2, 5)),
                 visit = rep(1:5,2),
                 measure = round(runif(10), digits = 2))

# 生成符合要求的配对数据集
df2 <- df %>%
  # 先按受试者id、测量时点排序,避免顺序错乱导致配对错误
  arrange(id, visit) %>%
  # 按受试者分组,保证不同人的测量值不会混在一起配对
  group_by(id) %>%
  mutate(
    measure1 = measure,
    # 取当前行的下一个测量值作为第二列
    measure2 = lead(measure, 1),
    # 按你给出的示例结构,每个受试者下的配对visit从1开始编号
    visit = row_number()
  ) %>%
  # 剔除每个受试者最后一个无法配对的测量值(没有下一个测量点)
  filter(!is.na(measure2)) %>%
  # 按需要保留列
  select(id, visit, measure1, measure2) %>%
  ungroup()

结果验证

运行代码后查看id=1的前2行,和你给出的预期结构完全一致:

head(df2 %>% filter(id == 1), 2)

输出:

# A tibble: 2 × 4
     id visit measure1 measure2
  <dbl> <int>    <dbl>    <dbl>
1     1     1     0.27     0.37
2     1     2     0.37     0.57

注意事项

  • 处理前必须排序:如果原始数据的测量时点顺序是乱的,不排序直接滑动会得到错误的配对结果
  • 如果你需要保留配对对应的原始首次测量时点,把代码里visit = row_number()替换成visit = visit即可
  • 输出的数据集可以直接传入ICC计算函数,比如irr::icc(select(df2, measure1, measure2))就能直接计算组内相关系数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:00:59