Я хочу создать произвольное подмножество data.table
df
, которое очень велико (около 2 миллионов строк). Таблица данных имеет столбец веса, wgt
, который показывает, сколько наблюдений каждая строка представляет. Для создания вектора номеров строк, которые я хочу, чтобы извлечь, я поступайте следующим образом:Команда sample() слишком медленная в R
я получить точное количество наблюдений:
ns<- length(df$wgt)
я получаю количество требуемых линий (30% выборки):
lines<-round(0.3*ns)
Я вычислить вектор вероятностей:
pr<-df$wgt/sum(df$wgt)
А потом вычислить вектор номеров строк, чтобы получить подвыборки:
ssout<-sample(1:ns, size=lines, probs=pr)
Конечная цель состоит в том, чтобы подмножество данных с помощью df[ssout,]
. Однако R зацикливается при вычислении ssout
.
Есть ли более быстрый/более эффективный способ сделать это?
Спасибо!
Использование 'sample.int' будет немного обрезаться, если вы укажете все аргументы, которые также заставят вас * не * создать вектор' 1: ns' в первую очередь (как @DavidArenburg, предлагаемый пропуском часть '1:') –
Судя по вашему описанию («wgt, который указывает, сколько наблюдений каждая строка представляет»), вы должны сэмплировать с заменой. Если одна строка имеет вес в десять процентов, вы должны иметь возможность рисовать ее несколько раз. – Frank
Я предполагаю, что это не имеет ничего общего с data.table (в котором он помечен); Я не уверен, хотя ... – Frank