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

R语言中循环实现dataframe删除流程且保留全部study的方法问询

这个流程完全可以通过循环实现,同时满足你提到的「study不被完全删除」的约束,核心思路是禁止同一study被多轮选中,避免同一个study的所有outcome都被删除。

实现代码

library(tidyverse)

# 原始示例数据
data <- expand_grid(study = 1:5, group = 1:2, outcome = c("A", "B"))

# 自定义参数,可根据需求修改
n_per_round <- 1 # 每轮采样的study数量
outcome_remove_list <- c("A", "B") # 每轮要删除的outcome,长度对应循环轮次
used_studies <- c() # 记录已被选中过的study,避免重复选取
result_data <- data # 初始化结果数据

# 循环执行删行逻辑
for (outcome_to_remove in outcome_remove_list) {
  # 仅从未被选过的study中采样,保证同一study最多被删一次
  available_studies <- setdiff(unique(result_data$study), used_studies)
  studies_to_remove <- sample(available_studies, size = n_per_round)
  
  # 执行删行
  result_data <- result_data %>%
    filter(!(study %in% studies_to_remove & outcome %in% outcome_to_remove))
  
  # 更新已使用的study列表
  used_studies <- c(used_studies, studies_to_remove)
}

# 输出最终结果
result_data

# 验证约束:循环前后unique(study)数量完全一致
length(unique(data$study)) == length(unique(result_data$study)) # 固定返回TRUE

扩展性说明

如果后续需要新增删除轮次,仅需要在outcome_remove_list中追加对应要删除的outcome值即可,无需修改循环主体逻辑;如果需要每轮采样不同数量的study,也可以把n_per_round修改为和outcome_remove_list长度一致的向量,每轮取对应位置的采样数即可适配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:57:05