Я работаю в R. У меня есть кадр данных, который содержит начальную и конечную позиции на хромосоме (где целое число представляет собой координату на хромосоме) Пример:
start end
1 5
3 7
4 10
12 7 (inverted is also allowed)
8 15
Я хочу, чтобы подсчитать, сколько раз координата присутствует во всех этих диапазонах. Итак, для приведенного выше примера выход будет следующим:
position count
1 1
2 1
3 2
4 3
5 3
6 2
7 3
8 3
9 3
10 3
11 2
12 2
13 1
14 1
15 1
У меня есть 62000+ таких диапазонов, где каждый диапазон составляет не менее 1000 позиций. Я знаю, как сделать это преобразование, но я не знаю, как это сделать эффективно, то есть через пару секунд.
Текущий (неэффективный код)
positions <- c()
for(i in seq(nrow(a))){
positions <- c(positions, seq(a[i,3], a[i,4]))
}
table(positions)
"a" - это мой кадр данных, а начальная и конечная координаты находятся в третьем и четвертом столбцах соответственно.
Один из столбцов в кадре данных содержит символы, поэтому для использования apply
мне нужно было бы создать новый кадр данных (потребляя лишнее пространство) или потребоваться преобразовать в целые числа внутри функции apply (дополнительно время). Извините, за то, что вы не сообщили об этом раньше.