在R中的if-else条件下随机采样



给定以下形式的数据帧:

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

我想在每个group中随机采样val,结果是一个新的数据帧。问题是每个group中的val的数量不同,所以我不能直接使用sample()。现在我想确定if-else条件下的样本大小:如果val的数量大于,比方说,3,那么对三个val进行采样。否则,将所有CCD_ 9作为样本。我该怎么做?提前谢谢!

我们可以使用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]

最新更新