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

如何在R中对DataFrame的Level1行进行间隔至少5行的10行随机抽样?

带行间隔约束的抽样解决方案

首先提取所有level等于1的行索引:

candidates <- which(df$level == 1)

接下来使用循环实现任意选中行间距≥5行的随机抽样逻辑,确保每次选中的行和已选行的索引差都满足要求:

# 初始化存储选中索引的向量
selected <- integer(0)
# 目标抽样数量
target_count <- 10

while (length(selected) < target_count && length(candidates) > 0) {
  # 从剩余候选中随机选一个
  current_pick <- sample(candidates, 1)
  selected <- c(selected, current_pick)
  # 剔除候选集中与当前选中行间距小于5的所有行索引
  candidates <- candidates[abs(candidates - current_pick) >= 5]
}

# 生成最终的newdf
newdf <- df[selected, ]

注意事项

  • 如果level=1的总行数本身不足,或者满足间隔要求的行数量达不到10,循环会提前终止,此时selected的长度会小于目标值,可根据实际情况调整抽样数量或间隔要求。
  • 该方法逻辑直观,适合小样本量的抽样需求,若处理大规模数据,可考虑优化为基于排序索引的批量筛选逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:46:02