r - 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_by
来sample_n
做到这一点?
我的第一个想法是:
df %>% group_by(grp) %>% sample_n(size = frq)
但这给出了错误:
is_scalar_integerish(size) 中的错误:找不到对象“frq”
解决方案
这有效:
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
不知道为什么当你尝试它时它不起作用。
推荐阅读
- forms - 如果可能,是否有选项或其他方法可以更改 NetSuite 交易表单中“子列表字段”列的显示类型?
- angular - 单击离子卡时如何调用离子选择
- c# - 在表达式中返回 TEntity
> - mysql - 如何在表之间使用外键
- php - 用于查找具有属性但顺序唯一的标签的正则表达式
- javascript - 拆分以获取数组,字符串中的对象
- mongodb - pymongo insert only 不存在
- python - 如何修复某些 URL 的 Newspaper3k 403 客户端错误?
- angular - 无法验证 Angular 6 this.fb.array
- pandas - 将 .loc[date] 切片传递到 altair 图表会产生奇怪的结果,具体取决于切片日期