【发布时间】:2019-09-04 16:18:05
【问题描述】:
我正在尝试以分组方式将采样函数应用于数据帧,它应该从每个组中采样 n 个样本,如果组大小小于 n,则为所有组成员。
使用dplyr,我第一次尝试
library(dplyr)
mtcars %>% group_by(cyl) %>% sample_n(2)
这在 n 小于所有组大小时有效,但当我选择大于组大小的 n 时不会占用整个组(请注意,其中一个 cyl 组中有 7 辆汽车):
mtcars %>% group_by(cyl) %>% sample_n(8)
Error: `size` must be less or equal than 7 (size of data),
set `replace` = TRUE to use sampling with replacement
我试图通过创建一个适应的 group_n 函数来解决这个问题,如下所示:
sample_n_or_all <- function(tbl, n) {
if (nrow(tbl) < n)return(tbl)
sample_n(tbl, n)
}
但是使用我的自定义函数 (mtcars %>% group_by(cyl) %>% sample_n_or_all(8)) 会产生同样的错误。
有什么建议可以让我调整我的功能,以便将其应用于每个组?或者问题的其他解决方案?
【问题讨论】: