Найти диапазон и количество позиций с нуля - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть два файла Excel

enter image description here

И,

enter image description here

Я хочу знать диапазон и позиции с 0 значениями покрытия и выводом следующим образом:

enter image description here

Где,

size = (end - start)+1

mapped = positions with > 0 Coverage

%mapped = (mapped/size)*100

Completeness = (Total mapped/Total Size)*100

например, для вышеуказанного вывода. Полнота = ((3 + 2) / (7 + 5)) * 100 = 41,66%

У меня есть несколько таких входных файлов для анализа.Как я могу сделать это в R?

1 Ответ

0 голосов
/ 10 декабря 2018

Чтобы узнать, какая часть data.frame удовлетворяет некоторому условию, вы можете использовать which, чтобы получить все индексы, для которых это условие равно TRUE, так что вы можете использовать его для получения частей, которые выВы заинтересованы.

Если мы предположим, что у вас есть data.frame с именем df1 для первой части вашего вопроса, а второе изображение с именем df2, то вы можете получить индексный диапазонстрок в df1 с 'chr1', например так:
range <- which(df1$chr=='chr1')[df2$start[1]]:which(df1$chr=='chr1')[df2$end[1]]
или вместо того, чтобы вручную вводить 'chr1', вы можете использовать df2$chr[1].
Для подсчета sum(df1[range, 'coverage'] > 0) говорит вам, какмногие значения больше нуля.

Теперь нам нужно сделать это для всех строк вместе, мы можем использовать sapply, чтобы сделать что-то для всех предоставленных значений:

df2$mapped <- sapply(1:nrow(df2), function(row) {
    range <- which(df1$chr==df2$chr[row])[df2$start[row]]:which(df1$chr==df2$chr[row])[df2$end[row]]
    sum(df1[range, 'coverage'] > 0)
}

Другие ваши вопросы прощеответил, затем спросил, как в R большинство функций векторизовано: вы можете сделать что-то для нескольких значений одновременно.

df2$size = (df2$end - df2$start)+1
df2$perc_mapped = (df2$mapped/df2$size)*100

Полнота - это всего лишь сумма всех строк вместе, sum(df2$size) и sum(df2$mapped)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...