У меня есть два фрейма данных R, у каждого есть группа (одна из 25 строк) и столбец позиции (целое число). Я хотел бы проверить для каждой записи кадра данных A, существует ли запись в кадре данных B, которая является частью той же группы, и дельта между ее целым числом позиции меньше 500. Если, поэтому я хочу отметить эту запись в фрейм данных A.
Так, например, первая запись в A будет соответствовать третьей записи в B (группа такая же, и разница между их позициями меньше 500 б.п.). Поэтому он был отмечен в выходной таблице.
head(A)
group pos
1 chr1 3202965
2 chr1 3000168
3 chr1 3000204
4 chr2 3000560
5 chr2 3000674
6 chr3 3000698
head(B)
group pos
1 chr1 3180137
2 chr1 3200918
3 chr1 3202983
4 chr1 3309167
5 chr4 3458278
6 chr1 4249136
A_out <- magic(A,B)
head(A_out)
group pos out
1 chr1 3202965 +
2 chr1 3000168 -
3 chr1 3000204 -
4 chr2 3000560 -
5 chr2 3000674 -
6 chr3 3000698 -
Моя интуиция была бы вложенным циклом (сначала A, а затем B) и проверяла для каждой комбинации входов, соответствует ли она. Но мои фреймы данных довольно большие (12052773 и 44459 записей соответственно), и это никогда не закончится.
Есть ли более разумный подход к этому?