使用交叉和 sample_n 对多个不同的样本大小进行采样以创建单个 df

sample multiple different sample sizes using crossing and sample_n to create single df

我正在尝试使用 sample_n 对数据帧进行采样。我知道 sample_n 通常一次只接受一个 size= 参数,但是,我想抽样大小从 2 到 df 中的最大行数。不幸的是,我在下面编译的代码无法完成这项工作。所需的输出将是一个带有 id= 列的数据框或一个列表除以来自 crossing() 的 id 列。

df <- data.frame(Date = 1:15,
                 grp = rep(1:3,each = 5), 
                 frq = rep(c(3,2,4), each = 5))

data_sampled_by_stratum <- df %>%
  group_by(Date) %>%
  crossing(id = seq(500)) %>% # repeat dataframes
  group_by(id) %>%
  sample_n(size=c(2:15)) %>% 
  group_by(CLUSTER_ID,Date) %>% filter(n() > 2)

如果您有一个包含不同站点的专栏,您可以这样做。

data_sampled_by_stratum <- data_grouped_by_stratum %>%
    group_by(siteid, Date) %>%
    crossing(id = seq(500)) %>% # repeat dataframes
    sample_n(rbinom(1,sum(siteid==i),(1-s)^2))