我有一个大型数据集,我有多个想要采样的组。每组具有一定数量的阳性病例,值为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)
答案 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 *阳性病例数/阴性病例数,因此样本分数不会准确,但它具有您想要的预期值。