R语言如何从Excel数据集随机抽取指定类别对应的行数据
R实现随机抽取Station类别全量行的方案
你可以按照以下步骤实现需求,针对大数据集也提供了提速方案:
步骤1:读取Excel数据
推荐使用readxl包读取Excel文件,相比其他工具内存占用更低:
# 安装依赖包(首次使用执行) install.packages(c("readxl", "dplyr")) # 加载包 library(readxl) library(dplyr) # 替换为你的实际文件路径读取数据 df <- read_excel("你的数据文件路径.xlsx")
步骤2:实现100次重复随机抽取
逻辑为:先提取所有Station的唯一取值,每次随机选1个取值,再筛选对应取值的全部行,最终100次结果存在列表中方便后续分析:
# 提取Station列的所有唯一取值 station_unique <- unique(df$Station) # 设置随机种子,保证结果可复现,不需要复现可以删除该行 set.seed(123) # 执行100次抽取,结果存储在result_list中 result_list <- lapply(1:100, function(i) { # 随机抽取1个Station取值 selected_station <- sample(station_unique, size = 1) # 筛选该Station对应的全部行 filter(df, Station == selected_station) })
结果使用说明
- 你可以通过
result_list[[n]]提取第n次抽取的数据集,比如result_list[[1]]就是第一次的抽取结果,可直接用于后续分析 - 如果需要记录每次抽取的Station名称,可以修改返回结构:
result_list <- lapply(1:100, function(i) { selected_station <- sample(station_unique, size = 1) list( station_name = selected_station, data = filter(df, Station == selected_station) ) }) - 如果要求100次抽取的Station不重复,只需将
sample(station_unique, size = 1)修改为sample(station_unique, size = 100, replace = FALSE)[i]即可,注意该设置要求你数据中Station的唯一值数量≥100
大数据集提速方案
如果你的数据集规模极大,普通dplyr处理较慢,可以使用data.table包优化速度:
# 安装依赖包(首次使用执行) install.packages("data.table") library(data.table) # 将数据转为data.table格式并设置索引,大幅提升筛选速度 dt <- as.data.table(df) setkey(dt, Station) # 100次抽取逻辑 result_list_dt <- lapply(1:100, function(i) { selected_station <- sample(station_unique, size = 1) dt[Station == selected_station] })
内容的提问来源于stack exchange,提问作者Tim Henderson
相关产品推荐
相关产品推荐

