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

如何在R语言中基于输入向量的分布进行随机抽样?

问题描述

我有一个名为data的数值向量,长度为3205,其前20个元素如下:

head(data,20)
 [1]  225.43200   29.20875  329.46792   22.70996
 [5]   80.84970  374.23959  343.11610  319.04798
 [9] 2477.73200   72.79434   30.53376   92.39412
[13]   47.70744   52.30388  339.59634 1177.00448
[17]   48.27329  541.80997   38.45772 1568.93400

该数据的密度图可通过代码plot(density(data))生成,对应密度图:
密度图

需求:基于该向量的分布进行随机抽样,要求抽样结果大部分数值在1000以下,小部分在1000-3000之间,且抽样得到的向量的密度图与原数据密度图一致,求最优实现方法。

最优实现方法

直接从原数据中进行随机抽样即可,因为原数据本身就符合你要求的分布特征,抽样会完整保留原分布的形态,是最直接高效的方案。

1. 有放回抽样(推荐,支持任意样本量)

使用R内置的sample()函数,设置replace = TRUE,可指定任意抽样数量(比如和原数据长度一致):

# 设定抽样数量,可根据需求调整
sample_size <- 3205
# 执行有放回抽样
sampled_data <- sample(data, size = sample_size, replace = TRUE)

2. 无放回抽样(适用于样本量小于原数据的场景)

如果不需要重复元素,设置replace = FALSE:

# 抽取1000个不重复样本
sampled_data <- sample(data, size = 1000, replace = FALSE)

验证抽样效果

可以通过绘图对比原数据与抽样数据的密度分布,确认一致性:

# 绘制原数据密度图
plot(density(data), col = "darkblue", main = "原数据与抽样数据密度对比")
# 叠加抽样数据的密度曲线
lines(density(sampled_data), col = "darkred", lty = 2, lwd = 1.5)
# 添加图例
legend("topright", 
       legend = c("原数据", "抽样数据"), 
       col = c("darkblue", "darkred"), 
       lty = c(1, 2))

方案优势

  • 完全保留原数据的分布特征,自然满足“大部分值<1000、小部分值在1000-3000”的要求
  • 无需拟合复杂概率模型,计算效率极高
  • 样本量足够时,抽样数据的密度图与原数据几乎完全重合

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:35:17