r - 如何从 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)
解决方案
听起来您正在寻找分层抽样。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)
推荐阅读
- python - RetryError: 使用 Gcloud 调用 functools.partial 时超过了 600.0s 的最后期限
- json - Jackson JsonMappingException:无限递归(StackOverflowError)
- ruby - 使用 capybara + selenium 验证特定 css 值的文本
- python - 如何将输入、变量和文本从一个 python 脚本发送到另一个已经运行的 python 脚本?
- ponylang - 小马的静态类方法?
- list - Prolog - 计算两个列表中的匹配项
- javascript - 为什么`@change` 触发器不适用于 v-data-picker?
- php - 按另一个预定义的、非详尽的数字数组对数字数组进行排序,然后升序排序
- mysql - 如何从父表的两个子表中获取值
- assembly - 尝试执行 /bin/sh 但生成 NULL