在 R 中使用 if-else 条件随机抽样

Randomly sample with if-else condition in R

给定以下形式的数据框:

group          val
A              10
A              1
B              9
C              6
...

我想在每个 group 中随机抽样 val,结果是一个新的数据框。问题是每个group里面的val的个数不一样,所以不能直接用sample()。现在我想确定 if-else 条件下的样本量:如果 val 的数量大于,比方说,3,那么三个 val 被采样。否则所有 val 都被作为样本。我怎样才能做到这一点?提前致谢!

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(df)),按'group'分组,得到'val'

sample
library(data.table)
setDT(df)[, .(val=sample(val)), by = group]

如果我们需要添加条件 if nrow 大于 3,sample 3 个值或 else 所有值。

setDT(df)[, if(.N >3 ) sample(val, 3, replace=FALSE) else sample(val), by = group]