我有一个包含很多行的数据集(~500000)。该数据集的“X”列的平均值为 4.5。我想对数据集(没有替换)进行采样,使其具有大约 50000 行,同时达到大约 3.5 的“X”平均值。
我将如何在 R 中以相当快的方式做到这一点?
我有一个包含很多行的数据集(~500000)。该数据集的“X”列的平均值为 4.5。我想对数据集(没有替换)进行采样,使其具有大约 50000 行,同时达到大约 3.5 的“X”平均值。
我将如何在 R 中以相当快的方式做到这一点?
由于 OP 的唯一标准是在不考虑分散的情况下使样本均值接近 3.5,因此这是一种可能的方法:
代码:
library(data.table)
nr <- 5e5
ns <- 5e4
DT <- data.table(X=rnorm(nr, 4.5))
target <- 3.5
dev <- 0.05
setorder(DT[, absDev := abs(X - target)], absDev)
DT[, cummean := cumsum(X) / seq_len(.N)]
x <- DT[(target-dev) <= cummean & cummean <= (target+dev), sample(X, ns)]
mean(x)
#[1] 3.549371