У меня есть этот фрейм данных (который является выходом многоблочного пересекающегося между 8 различными файлами Bed моих данных ChIp-seq):
head(Table,)
chrom start end num list
2 chr1 4491607 4493602 2 6,7
6 chr1 4571540 4571826 2 7,8
15 chr1 5019126 5020672 2 2,7
21 chr1 7139275 7139745 3 4,6,7
23 chr1 7398185 7398658 2 7,8
28 chr1 9745462 9745912 4 1,4,6,7
Столбец «список» - это символьная строка, которая представляет присутствие этого конкретного пика в списке моих выборок.
Например, пик "2" находится в любом из образцов № 6 и 7.
Я хочу посчитать, сколько раз каждая комбинация из 2 выборок будет найдена в наборе данных, создав таблицу, в которой собрана информация.
Так что, в основном, многоблочное пересечение возвращает слишком много перекрытий. Мне просто интересно, как сэмплы перекрываются друг с другом 2 в то время.
Например, образцы 6 и 7 находятся в любом пике 2,21,28 , а образцы 4 и 6 находятся в пиках 21 и 28
Посредством пакета tydiverse я могу решить проблему с 1 образцом за раз, но я не могу "сделать цикл" для каждой комбинации.
Table %>%
filter(str_detect(list, "6,7"))
Таким образом я получаю обратно все, что имеет такую комбинацию:
chrom start end num list
2 chr1 4491607 4493602 2 6,7
21 chr1 7139275 7139745 3 4,6,7
28 chr1 9745462 9745912 4 1,4,6,7
Я думаю, что это недостаточно эффективно и требует много скриптов, так как мне нужно было бы вручную фильтровать каждую комбинацию:
Чтобы назвать несколько:
- 7,8
- 6,8
- 5,8
- 4,8
- 3,8
- 2,8
- 1,8
- 6,7
- продолжает
Выполнение этого «моего пути» было бы что-то ужасное:
Counts <- NULL
Pippo <- Table %>%
filter(str_detect(list, "7,8"))
Counts <- cbind(nrow(Pippo))
Pippo <- Table %>%
filter(str_detect(list, "6,8"))
Counts <- cbind(Counts, nrow(Pippo))
Pippo <- Table %>%
filter(str_detect(list, "5,8"))
Counts <- cbind(Counts, nrow(Pippo))
Pippo <- Table %>%
filter(str_detect(list, "4,8"))
Counts <- cbind(Counts, nrow(Pippo))
Pippo <- Table %>%
filter(str_detect(list, "3,8"))
Counts <- cbind(Counts, nrow(Pippo))
Pippo <- Table %>%
filter(str_detect(list, "2,8"))
Counts <- cbind(Counts, nrow(Pippo))
Pippo <- Table %>%
filter(str_detect(list, "1,8"))
Counts <- cbind(Counts, nrow(Pippo))
Не могли бы вы предложить мне лучший способ подсчитать каждую комбинацию и создать этот сводный фрейм данных?
Большое спасибо