Julia分组数据随机抽取组别及组内个体的实现方法咨询
实现代码
你可以直接通过分组采样+组内二次采样两步完成,以下是可直接运行的实现:
首先确保已导入依赖包:
using DataFrames, Random, StatsBase
简洁版实现(推荐)
直接对已创建的GroupedDataFrame对象gb操作即可:
# 可选:设置随机种子保证结果可复现,不需要可删除 Random.seed!(123) # 第一步:随机抽取2个无重复的分组 sampled_groups = sample(gb, 2, replace=false) # 第二步:每个抽中的分组内随机抽取2条无重复记录 sampled_result = combine(sampled_groups) do group_df sample(group_df, 2, replace=false) end
运行示例输出(seed=123时)
4×4 DataFrame Row │ x1 x2 x3 x4 │ Int64 Int64 Int64 Int64 ─────┼──────────────────────────── 1 │ 1 2 4 1 2 │ 1 2 3 1 3 │ 1 3 4 3 4 │ 1 2 3 3
仅用标准库的兼容实现
如果不想引入StatsBase依赖,用Julia自带的Random库也可以实现:
using Random, DataFrames Random.seed!(123) # 抽2个分组索引 selected_group_idx = sample(1:length(gb), 2, replace=false) sampled_groups = gb[selected_group_idx] # 组内抽2行后拼接结果 sampled_result = vcat([df[sample(1:nrow(df), 2, replace=false), :] for df in sampled_groups]...)
注意事项
如果你的场景中可能存在分组行数不足2的情况,可以将组内采样的采样数量修改为min(2, nrow(group_df)),避免采样报错。
内容的提问来源于stack exchange,提问作者N A
相关产品推荐
相关产品推荐

