R: Самый быстрый способ создания фрейма данных с альтернативой IFELSE

У меня есть похожий вопрос на этот вопрос:Используя R, замените все значения в матрице <0.1 на 0?

Но в моем случае у меня есть гипотетически больший набор данных и переменные пороги. Мне нужно создать фрейм данных с каждым значением, полученным из условия, используя значения в первых столбцах того же фрейма данных. Эти значения различны для каждой строки.

Вот пример кадра данных:

SNP        A1  A2   MAF     
rs3094315  G   A   0.172  
rs7419119  G   T   0.240  
rs13302957 G   A   0.081  
rs6696609  T   C   0.393 

Вот пример моего кода:

seqIndividuals = seq(1:201)
for(i in seqIndividuals) {
  alFrequ[paste("IND",i,"a",sep="")] = ifelse(runif(length(alFrequ$SNP),0.00,1.00) < alFrequ$MAF, alFrequ$A1, alFrequ$A2)
  alFrequ[paste("IND",i,"b",sep="")] = ifelse(runif(length(alFrequ$SNP),0.00,1.00) < alFrequ$MAF, alFrequ$A1, alFrequ$A2)
}

Я создаю два новых столбца для каждого отдельного «i» в «seqIndividuals», получая либо значения из столбца «A1», если случайное значение меньше столбца «MAF», либо «A2», если оно выше. Код работает отлично, но по мере роста набора данных в строках и столбцах (отдельных лицах) время также значительно возрастает.

Есть ли способ избежать использования IFELSE для этой ситуации, как я понимаю, это работает как цикл? Я попытался сгенерировать матрицу случайных значений, а затем заменить их, но это занимает то же время или даже больше.

mtxAlFrequ = matrix(runif(length(alFrequ$SNP)*(201)),nrow=length(alFrequ$SNP),ncol=201)
mtxAlFrequ[mtxAlFrequ < alFrequ$MAF] = alFrequ$A1

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос