首页 > 解决方案 > dplyr sample_n 按组,每组具有唯一的大小参数

问题描述

我正在尝试从存在变量的数据集中提取分层样本,该变量指示每组的样本量应该有多大。

library(dplyr)
# example data 
df <- data.frame(id = 1:15,
                 grp = rep(1:3,each = 5), 
                 frq = rep(c(3,2,4), each = 5))

在此示例中,grp指的是我要抽样的组,并且frq是为该组指定的样本量。

使用split,我想出了这个可能的解决方案,它给出了预期的结果,但似乎效率很低:

s <- split(df, df$grp)
lapply(s,function(x) sample_n(x, size = unique(x$frq))) %>% 
      do.call(what = rbind)

有没有办法只使用 dplyrgroup_bysample_n做到这一点?

我的第一个想法是:

df %>% group_by(grp) %>% sample_n(size = frq)

但这给出了错误:

is_scalar_integerish(size) 中的错误:找不到对象“frq”

标签: rdplyr

解决方案


这有效:

df %>% group_by(grp) %>% sample_n(frq[1])

# A tibble: 9 x 3
# Groups:   grp [3]
     id   grp   frq
  <int> <int> <dbl>
1     3     1     3
2     4     1     3
3     2     1     3
4     6     2     2
5     8     2     2
6    13     3     4
7    14     3     4
8    12     3     4
9    11     3     4

不知道为什么当你尝试它时它不起作用。


推荐阅读