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

如何在tidyverse中结合group_by()与sample()按study分组筛选对应group行

按study随机筛选对应group行的实现方法

完整可运行代码

library(tidyverse)

# 构造示例数据集
data <- expand_grid(study=1:3,group=1:2,outcome=c("A","B"), time=0:1) %>%
  as.data.frame()

# 提取所有唯一study值,用于后续生成一一对应的筛选规则
unique_studies <- unique(data$study)
# 为每个study生成随机筛选规则:0取全部、1取group=1、2取group=2
group_row <- sapply(seq_along(unique_studies), 
                    function(i) sample(0:2, 1, replace = TRUE))
# 生成study与筛选规则的映射表,方便匹配
study_rule <- tibble(study = unique_studies, select_rule = group_row)

# 按规则筛选数据
result <- data %>%
  left_join(study_rule, by = "study") %>%
  group_by(study) %>%
  filter(select_rule == 0 | group == select_rule) %>%
  select(-select_rule) %>%
  ungroup() %>%
  arrange(study, group, outcome, time)

核心逻辑说明

  • 先为每个study生成一一对应的筛选规则,避免规则和study错位
  • 筛选条件select_rule == 0 | group == select_rule刚好匹配需求:
    • 规则为0时,select_rule ==0判断为真,该study下所有行都保留
    • 规则为1/2时,仅保留group等于对应规则值的行

原代码问题说明

  • 错误按group分组,需求是按study分组处理
  • 没有将随机生成的group_row和每个study做对应匹配,循环范围1:2和study数量不匹配
  • 规则为0时用unique(data$group)和group做比较,会出现向量长度不匹配的逻辑错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:06:01