使用'data.table'或'by'将不同的函数参数化应用于数据框拆分

时间:2019-01-22 09:42:34

标签: r data.table

我希望在一个数据帧层中进行分层随机抽样,以控制从每个层级返回的元素数量。

我可以使用data.table方法,但是仅使用'NumbeOfElements'向量的第一个元素。在这种情况下,我如何逐步遍历向量以返回所需的行数(随机选择)?我尝试了各种索引选项都无济于事。我也通过do.call(rbind(,by(...))尝试过一个版本,但是面临改变返回的元素数量的相同挑战。这是到目前为止的data.table代码:

dotnet.exe

我希望DF3包含站点A的2个随机元素,站点B的一个随机元素,站点C的一个随机元素。非常感谢您的指导。

1 个答案:

答案 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