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

如何在R中按组重采样行并使用相同随机种子?

解决方案

要实现按name分组后,每个组得到完全相同的有放回重采样结果,有两种直接的方法:

方法1:分组后固定相同随机种子采样

利用group_modify()对每个分组单独处理,在slice_sample()中指定统一的种子,确保所有组生成一致的采样结果:

library(tidyverse)

# 构造示例数据
names <- c(rep("a", 3), rep("b", 3), rep("c", 3)) 
test <- tibble(name = names, number = rep(c(1:3), 3))

# 分组重采样,每组使用相同种子
test_resampled <- test %>%
  group_by(name) %>%
  group_modify(~ slice_sample(.x, n = 3, replace = TRUE, set.seed = 456)) %>%
  ungroup()

# 查看结果
test_resampled

说明

  • group_modify()会遍历每个分组,对每组数据单独执行slice_sample;
  • set.seed = 456确保所有分组使用同一随机种子,因此采样结果完全一致;
  • 额外设置全局set.seed()可以保证整个流程的可复现性(可选)。

方法2:直接指定固定采样索引

如果已经明确需要的采样结果(比如示例中的1-2-2),可以直接指定采样的行索引,完全控制输出:

test_resampled <- test %>%
  group_by(name) %>%
  slice(c(1, 2, 2)) %>%
  ungroup()

# 输出结果
test_resampled

说明

  • slice(c(1,2,2))会在每个分组中重复选取第1、2、2行,直接得到你期望的输出;
  • 这种方法不需要随机种子,结果完全确定。

输出结果(与期望一致):

#   name number
#   <chr> <int>
# 1 a         1
# 2 a         2
# 3 a         2
# 4 b         1
# 5 b         2
# 6 b         2
# 7 c         1
# 8 c         2
# 9 c         2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:42:35