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

如何在dplyr中为组间成对比较嵌套数据?

实现两组组合的嵌套建模

步骤1:生成所有不重复的两组组合

先从原数据中提取唯一分组,用combn生成所有2个组的不重复组合,转成tibble方便后续处理:

# 获取唯一分组
unique_groups <- unique(data$group)

# 生成所有两组组合,转成tibble并添加组合标识
group_pairs <- combn(unique_groups, 2, simplify = FALSE) %>%
  map_dfr(~tibble(group1 = .x[1], group2 = .x[2])) %>%
  mutate(group_pair = str_c(group1, "-", group2))

步骤2:按组合筛选数据并嵌套

基于组合表,为每个组合筛选原数据中对应组的行,存储为列表列(效果和nest()一致):

nested_data <- group_pairs %>%
  mutate(data = map2(group1, group2, ~filter(data, group %in% c(.x, .y))))

步骤3:批量拟合模型

用map对每个嵌套的数据子集拟合指定的混合模型:

final_results <- nested_data %>%
  mutate(lmm = map(data, \(x) lmer(value ~ time * group + (1|ID), data = x)))

完整代码整合

把所有步骤整合后,直接运行即可得到每行对应一个两组组合的建模结果:

library(tidyverse)
library(lme4)
set.seed(123)

# 生成示例数据
data <- tibble(
  ID = rep(1:50, each = 2),            
  time = rep(c(0, 1), times = 50),
  group = rep(sample(c("A", "B", "C"), 50, replace = TRUE), each = 2),
  value = runif(100)
)

# 生成两组组合并完成建模
final_results <- combn(unique(data$group), 2, simplify = FALSE) %>%
  map_dfr(~tibble(group1 = .x[1], group2 = .x[2], group_pair = str_c(.x, collapse = "-"))) %>%
  mutate(
    data = map2(group1, group2, ~filter(data, group %in% c(.x, .y))),
    lmm = map(data, \(x) lmer(value ~ time * group + (1|ID), data = x))
  )

# 查看结果
final_results

关键说明

  • combn(..., simplify = FALSE)生成无序组合,避免A-B和B-A这类重复建模,节省计算资源
  • map2用来同时传递两个分组参数,精准筛选对应的数据子集
  • 最终结果每行对应一组两组组合,包含组合标识、对应数据子集以及拟合好的模型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:21:05