如何在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
相关产品推荐
相关产品推荐

