R - 具有大数据集的分层抽样

时间:2017-11-09 20:27:31

标签: r sampling

我有一个大型数据集,我有多个想要采样的组。每组具有一定数量的阳性病例,值为1,更多阴性病例,值为零。

对于每个组,我想选择所有阳性病例,然后随机数量的阴性病例等于该组中阳性病例数量的4倍。

我还需要能够在很多数据上快速运行的东西。

半更新:

stratified_sample = data %>%
    group_by(group) %>%
    mutate(n_pos = sum(response == 1),
           n_neg = 4 * n_pos) %>%
  group_by(group,response) %>%
  mutate(rec_num = n(),
         random_val = runif(n()),
         random_order = rank(random_val)) %>%
    filter(response == 1 | random_order <= n_neg)

1 个答案:

答案 0 :(得分:0)

如果您使用正确的名称,这应该有效。如果您有问题,请提供可重现的示例。

library(dplyr)

stratified_sample = your_large_dataset %>%
    group_by(whatever_your_grouping_variable_is) %>%
    mutate(n_pos = sum(column_name_of_your_label == 1),
           n_neg = sum(column_name_of_your_label == 0),
           cutoff = 4 * n_pos / n_neg) %>%
    filter(column_name_of_your_label == 1 | runif(n()) < cutoff)

这给每个负面情况一个概率为4 *阳性病例数/阴性病例数,因此样本分数不会准确,但它具有您想要的预期值。