Создание выборки кадров данных случайным образом на основе условий в 2 столбцах - PullRequest
0 голосов
/ 09 июля 2019

У меня есть фрейм данных A с 10 000 000 строк и 5 столбцов, как этот:

SNP REC AF X Y Z
rs1 2.3 0.22 sss ff 472
rs200 4.7 0.7 d tg 634
rs33 30.1 0.5 ddf ap 929

Используя R, я хотел бы сгенерировать 50 новых фреймов данных со всеми столбцами из A с циклическим переходом через первый50 строк следующим образом.

Для каждого i, j в столбцах REC, AF выберите 1000 случайных строк из A (выборка с заменой), где выполняются следующие 2 условия:

1) i-2.5 < i < i+2.5 # i = value in REC
2) j-0.05 < j < j+0.05 # j = value in AF

Например,;для строки 1: выберите 1000 случайных строк в A, где REC находится в диапазоне от -0,2 до 4,8, а AF находится в диапазоне от 0,17 до 0,27;для строки 2: выберите 1000 случайных строк в A, где REC находится в диапазоне от 2,2 до 7,2, а AF находится в диапазоне от 0,65 до 0,75;... для строки 50: ...;etc

Я знаю, как использовать функцию выборки:

A[sample(nrow(A), 1000,replace = TRUE), ]

Но я не знаю, как автоматизировать функцию.

Любое предложение будеточень приветствую!

1 Ответ

1 голос
/ 09 июля 2019

Мы можем использовать Map здесь. Подмножество REC и AF только для первых 50 значений, найдите индексы, которые находятся в диапазоне, и sample 1000 строк, которые соответствуют критериям.

Map(function(i, j) df[sample(which(df$REC > (i - 2.5)  &  df$REC < (i + 2.5) &
           df$AF > (j - 0.05)  &  df$AF < (j + 0.05)), 1000, replace = TRUE), ],
      df$REC[1:50], df$AF[1:50])
...