如何对大型data.table(data.table
包)的子样本进行采样?是否有更优雅的方式来执行以下
DT<- data.table(cbind(site = rep(letters[1:2], 1000), value = runif(2000)))
DT[site=="a"][sample(1:nrow(DT[site=="a"]), 100)]
猜猜有一个简单的解决方案,但无法选择正确的措辞来搜索。
更新
更一般地说,如何在不创建行号的临时列的情况下访问data.table的i
参数中的行号?
答案 0 :(得分:4)
使用data.table
的最大好处之一是您可以为数据设置密钥
使用key
然后.I
(内置可修复版。请参阅?data.table
了解更多信息),您可以使用:
setkey(DT, site)
DT[DT["a", sample(.I, 100)]]
至于你的第二个问题"how can I access a row number in data.table's i argument"
# Just use the number directly:
DT[17]
答案 1 :(得分:3)
使用which
,您可以找到行号。您可以简单地从具有所需属性的所有行中进行采样,而不是从1:nrow(...)
进行采样。在您的示例中,您可以使用以下内容:
DT[sample(which(site=="a"), 100)]