首页 > 解决方案 > 如何从 tibble 中的不同组中选择不同比例的样本

问题描述

如何从 tibble 中的不同组中选择不同比例的样本。

下面创建了一个示例小标题。它有 100 个 0 和 800 个 1。我想随机选择 80% 的 0 和 20% 的 1。

sample_frac 或 sample_n 不允许对每个组进行不同的采样链接到他们的文档

library(tidyverse)

a <- c(rep(0, 100),
       rep(1, 1000))

tbl <- tibble(a)

# select 80% of 0s and 20% of 1s

b <- tbl %>%
  group_by(a) %>%
  sample_frac(size = 0.2)

标签: rtidyverse

解决方案


听起来您正在寻找分层抽样。dplyr提供较新的slice_sample(或sample_n/sample_frac在较旧的版本)。只需在如下所示的向量中提供每个级别的权重,然后将其输入weight_by参数。

# provide proportions 
weights <- ifelse(a == 0, 0.8, 0.2)
# feeds weights into sample function
b <- tbl %>%
    slice_sample(prop = 0.2, weight_by = weights)

推荐阅读