我希望在一个数据帧层中进行分层随机抽样,以控制从每个层级返回的元素数量。
我可以使用data.table方法,但是仅使用'NumbeOfElements'向量的第一个元素。在这种情况下,我如何逐步遍历向量以返回所需的行数(随机选择)?我尝试了各种索引选项都无济于事。我也通过do.call(rbind(,by(...))尝试过一个版本,但是面临改变返回的元素数量的相同挑战。这是到目前为止的data.table代码:
dotnet.exe
我希望DF3包含站点A的2个随机元素,站点B的一个随机元素,站点C的一个随机元素。非常感谢您的指导。
答案 0 :(得分:1)
您可以将具有所需样本量的原始表加入表格,然后对每个站点进行抽样,如下所示:
setDT(DF)
DF[DF[.(Site=c("A","B","C"), n=c(2,1,0)), on=.(Site), sample(.I, n), by=.EACHI]$V1]
或将样本量存储在命名向量中,您可以按每个站点进行采样
sz <- c(A=2, B=1, C=0)
DF[DF[, sample(.I, sz[Site]), by=.(Site)]$V1]
示例输出:
Site Depth
1: A 12
2: A 10
3: B 14