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

如何按因子水平平衡data.frame中的观测样本?

操作术语与通用抽样方法

正确术语

这个操作属于分层欠采样(Stratified Undersampling),也可称为固定数量分层抽样(Fixed-Size Stratified Sampling)。它是分层抽样的一种特殊应用:针对类别不平衡的数据集,对样本量过多的类别进行向下抽样(欠采样),最终让各因子水平的样本量趋于一致,解决手动抽样不适用于大数据集或多因子水平的问题。

通用实现方法

以下提供两种适用于任意规模数据集、任意多因子水平的R语言实现方案:

方案1:Base R原生实现

无需额外安装包,通过拆分-抽样-合并的逻辑完成:

# 定义每个类别目标抽样数量
target_n <- 50

# 按class分层抽样并合并结果
sampled_data <- do.call(rbind, lapply(split(data, data$class), function(subset) {
  # 自动适配样本量不足的类别(取全部样本)
  sample_size <- min(nrow(subset), target_n)
  subset[sample(nrow(subset), sample_size), ]
}))

方案2:tidyverse/dplyr简洁实现

适合习惯tidy语法的用户,代码更直观:

library(dplyr)

target_n <- 50

sampled_data <- data %>%
  group_by(class) %>%
  slice_sample(n = target_n) %>% # 无放回抽样,自动处理样本量不足的情况
  ungroup()

结果验证

执行后可通过以下代码查看各类别样本量:

table(sampled_data$class)

针对你的示例数据,输出会是A:50, B:50, C:50, D:50,总样本量200,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:39:34