Образец определенного числа строк таблицы, условных для переменной / столбца, достигающего определенного среднего значения - PullRequest
1 голос
/ 05 ноября 2019

У меня есть набор данных со многими строками (~ 500000). Столбец «X» этого набора данных имеет среднее значение 4,5. Я хотел бы, чтобы образец набора данных (без замены) имел приблизительно 50000 строк и в то же время достигал среднего значения "X" приблизительно 3,5.

Как бы я сделал это в R таким образом, чтобыдостаточно быстро?

1 Ответ

0 голосов
/ 06 ноября 2019

Поскольку единственным критерием ФП является выборочное среднее значение, близкое к 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
...