You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何实现非随机抽样?有序拆分等规模样本的技术求助

问题解答:非随机抽样方法 + 有序拆分等规模样本

嘿,我来帮你搞定这两个问题!

一、非随机抽样的常见实用方法

非随机抽样是不依赖随机选择的抽样方式,常用于特定场景,常见类型有:

  • 便利抽样:怎么方便怎么来,比如街头拦人做调研、用身边同事当样本。优点是快、成本低,但样本代表性差,结果容易有偏差。
  • 判断抽样(目的抽样):靠研究者的经验和判断选样本,比如研究高端消费行为时专门选奢侈品店的顾客,适合针对性强的研究,但结果好坏全看研究者的水平。
  • 配额抽样:先按关键特征(比如年龄、性别、收入)分层,给每层分配固定数量的名额,再在每层里非随机选样本。比便利抽样靠谱些,但还是没法完全避免主观偏差。
  • 滚雪球抽样:先找到几个符合条件的样本,再让他们介绍同类型的人,特别适合找那些难接触的群体,比如小众职业、隐性疾病患者。

二、R语言中排序后保持顺序拆分等规模样本

你的需求是先排序,再拆成等规模样本且不打乱顺序,这个其实很简单,我一步步给你写代码:

首先先把你的数据补全并排序:

# 你的原始数据
acct_num <- c('4525','52222','22892','67181','67733','737382', '5534','2228','7282','45622')
Probability <- runif(10, min = 0, max = 10)
acct_details <- data.frame(acct_num, Probability)

# 按Probability升序排序(要降序的话加decreasing=TRUE)
acct_sorted <- acct_details[order(acct_details$Probability), ]

方法1:手动拆分(适合固定组数)

比如你要拆成2组,每组5条,直接按切片取就行,完全保持顺序:

group1 <- acct_sorted[1:5, ]
group2 <- acct_sorted[6:10, ]

方法2:通用拆分函数(适合任意可整除的组数)

如果想灵活调整组数,写个小函数就搞定,还能自动检查是否能拆分等规模样本:

split_ordered <- function(df, num_groups) {
  # 先检查总样本数能不能被组数整除
  if (nrow(df) %% num_groups != 0) {
    stop("总样本数不能被组数整除,没法拆成等规模样本哦!")
  }
  # 计算每组的大小
  group_size <- nrow(df) / num_groups
  # 生成连续的分组标签(比如1,1,2,2...)
  groups <- rep(1:num_groups, each = group_size)
  # 拆分数据,完美保持排序后的顺序
  split(df, groups)
}

# 示例:拆成5组,每组2条
split_result <- split_ordered(acct_sorted, 5)
# 查看拆分后的结果
split_result

这个函数的逻辑是给排序后的每一行分配连续的分组编号,然后用split拆分,这样每个组里的元素都是排序后的连续片段,绝对不会打乱顺序。如果总样本数没法被组数整除,函数会直接报错提醒你调整组数~

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

火山引擎 最新活动