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

如何在R语言数据框中保留指定数量的随机抽取因子水平

R实现因子水平随机抽样保留的方案

你可以直接用基础R函数完成操作,不需要额外安装第三方包,习惯用tidyverse生态的话也可以用对应函数实现,核心逻辑都是「提取全量因子水平→无放回随机抽取80个目标水平→过滤数据集→清除未被选中的冗余因子水平」。

基础R实现

用到的核心函数:

  • levels():提取因子变量的所有水平
  • sample():执行无放回随机抽样
  • %in%:匹配观测所属的水平是否在保留列表中
  • droplevels():删除过滤后不再出现的冗余因子水平

示例代码(假设你的数据集名为my_data,目标因子列名为cat_var):

# 设定随机种子,保证抽样结果可复现,数字可以随便填
set.seed(2024)
# 提取全量水平,共140个
all_lv <- levels(my_data$cat_var)
# 无放回抽取80个要保留的水平
keep_lv <- sample(all_lv, size = 80, replace = FALSE)
# 过滤数据集,仅保留选中水平的观测
my_data_filtered <- my_data[my_data$cat_var %in% keep_lv, ]
# 清除残留的空水平
my_data_filtered$cat_var <- droplevels(my_data_filtered$cat_var)

注意:如果需要重复得到同一组抽样结果,必须在抽样前运行set.seed(),否则每次运行脚本都会得到不同的保留水平。

tidyverse生态实现

如果你平时用dplyr流程处理数据,可以用更连贯的管道写法,因子清理可以用forcats包的fct_drop()函数,逻辑和基础R完全一致:

library(dplyr)
library(forcats)

set.seed(2024)
# 抽取保留水平
keep_lv <- my_data %>%
  pull(cat_var) %>%
  levels() %>%
  sample(size = 80, replace = FALSE)
# 过滤并清理水平
my_data_filtered <- my_data %>%
  filter(cat_var %in% keep_lv) %>%
  mutate(cat_var = fct_drop(cat_var))

结果校验

抽样过滤完成后,可以运行以下命令检查保留的水平数是否符合预期,正常运行后应该返回结果80:

length(levels(my_data_filtered$cat_var))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:39:19