给定以下形式的数据帧:
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]