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

如何用Tidyverse在R中生成包含全部30个站点的40个随机抽样值?

用Tidyverse实现覆盖所有站点的随机抽样策略

要实现每个站点(1-30)至少出现一次、总长度为40的随机序列,核心思路是先确保所有站点都被包含,再补充随机重复的站点,最后打乱顺序。用Tidyverse可以轻松实现:

步骤分解

  • 先生成包含全部30个站点的基础序列,保证每个站点至少出现一次
  • 从站点池中随机抽取10个(允许重复),补充到基础序列中
  • 将合并后的序列打乱顺序,得到最终结果

代码实现

library(tidyverse)

df <- data.frame(sites = 1:30)

# 生成包含所有站点的基础序列
base_sites <- df %>% pull(sites)

# 随机抽取10个可重复的补充站点
extra_sites <- df %>% sample_n(size = 10, replace = TRUE) %>% pull(sites)

# 合并并打乱顺序
final_sample <- c(base_sites, extra_sites) %>% sample(size = length(.), replace = FALSE)

# 验证结果
length(final_sample)          # 输出40,符合总长度要求
all(1:30 %in% final_sample)   # 输出TRUE,确认所有站点都被覆盖

简化管道写法

如果偏好更紧凑的链式代码,可以把所有步骤整合到一条管道中:

final_sample <- df %>%
  bind_rows(df %>% sample_n(10, replace = TRUE)) %>%
  pull(sites) %>%
  sample(size = 40, replace = FALSE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:26:06