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

R语言如何均匀随机缩减7万行dataframe至1万行

R语言实现全范围均匀缩减dataframe行数的方法

完全可以实现,根据你对采样均匀度的要求,有两种常用方案可选:

方案1:等距系统抽样(优先推荐,均匀性最稳定)

这个方法会严格按照固定间隔从数据集首尾到中间均匀取样,绝对不会出现采样点集中在某一段、或者直接删除前/后连续行的问题,最贴合你“采样结果在整个数据集范围内均匀分布”的要求。
实现逻辑:从70000行数据中均匀取10000个点位,相邻点位间隔固定,覆盖从第一行到最后一行的全量数据范围。
参考代码(假设你的原始dataframe命名为df):

# 基础参数计算
total_row <- nrow(df)
target_sample_num <- 10000

# 生成等距抽样索引:从第1行到最后1行生成10000个等距点位
sample_idx <- seq(from = 1, to = total_row, length.out = target_sample_num) |> 
  round() |> 
  unique() # 处理计算结果为小数时的索引重复问题

# 提取采样后数据集
df_sampled <- df[sample_idx, ]

该方法会自动包含数据集的第一行和最后一行,所有采样点等距覆盖全量数据范围,均匀性不会受随机波动影响。

方案2:无放回简单随机抽样

如果你不需要严格等距,只需要样本随机散布在全数据集、不集中在首尾段,可以用基础随机抽样方法:

set.seed(42) # 设定随机种子,保证采样结果可复现
df_sampled_random <- df[sample(nrow(df), size = 10000, replace = FALSE), ]

这个方法是从70000行里完全随机无放回抽取10000行,不会出现连续删除前6万/后6万行的问题,但存在极小概率出现局部区段样本偏多/偏少的情况,对均匀度要求极高的场景不推荐。

注:两种方法都不会修改你原始dataframe的列结构,你给出的ID、username、text、date字段都会完整保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:57:13