Я пытался создать код для добавления определенных индексов к большим фреймам данных (в среднем 21000 строк делятся на 400 блоков и 10 столбцов) по положению идентификатора contigs в блоках. Блоки задаются положением геномных диапазонов в геноме. Я тоже искал соответствующую тему в интернете. Я не смог создать / найти подходящий код для моей проблемы.
Пример данных перед индексацией
seqnames = sprintf("H7",seq(1:8))
start <- c(0,11,0,11,0,21,31,11)
end <- c(10,20,10,20,10,30,40,20)
strand <- sprintf("*", seq(1:8))
cont_ID <- c("001","001","004","004","003","001","001","003")
block <- c(seq(1:8))
df <- data.frame(seqnames,start,end,strand,block,cont_ID)
names(df) <- c("seqnames","start","end","strand","block","contig_ID")
seqnames start end strand block contig_ID
1 H7 0 10 * 1 001
2 H7 11 20 * 2 001
3 H7 0 10 * 3 004
4 H7 11 20 * 4 004
5 H7 0 10 * 5 003
6 H7 21 30 * 6 001
7 H7 31 40 * 7 001
8 H7 11 20 * 8 003
Ожидаемый результат
Идеальный индекс отмечает как соединение идентификатора contig с контигами с одинаковым идентификатором (т. Е. Использует одно и то же значение из столбца contig_ID), так и конкретную позицию контига или группы контигов с одинаковым идентификатором к другим контигам в последовательности строк. Конкретная позиция задается начальным и конечным столбцами. Если значения из начальных столбцов непосредственно следуют за предыдущими значениями из конечного столбца и не разделены контигами с другим идентификатором, то это «один блок», который мне нужно пометить индексом. В приведенном ниже примере я использовал для обозначения конкретной позиции / комбинации букв и идентификаторов контигов.
фрейм данных с нужными индексами (индекс столбца):
seqnames start end strand block contig_ID index
1 H7 0 10 * 1 001 A_001
2 H7 11 20 * 2 001 A_001
3 H7 0 10 * 3 004 A_004
4 H7 11 20 * 4 004 A_004
5 H7 0 10 * 5 003 A_003
6 H7 21 30 * 6 001 B_001
7 H7 31 40 * 7 001 B_001
8 H7 11 20 * 8 003 B_003
Большое спасибо за помощь!