对变量/列达到特定平均值的条件下特定数量的小标题行进行采样

问题描述 投票:1回答:1

我的数据集包含很多行(〜500000)。该数据集的列“ X”的平均值为4.5。我想对数据集进行采样(不进行替换),使其大约有50000行,同时达到大约3.5的“ X”平均值。

我将如何以相当快的方式在R中执行此操作?

r conditional-statements sampling
1个回答
0
投票

由于OP的唯一标准是在不考虑分散性的情况下使样本均值接近3.5,因此这是一种可能的方法:

  1. 计算与3.5的偏差,
  2. 按照该偏差对数据进行排序,
  3. [计算X的累积平均值,按与3.5的绝对偏差排序,]
  4. 在对数据进行采样之前,将数据的累积均值细分为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
© www.soinside.com 2019 - 2024. All rights reserved.