У меня есть два файла excel
И,
Я хочу знать диапазон и позиции с 0 значениями покрытия и вывод следующим образом:
Где,
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) используйте данные примера, а не изображения. 2) Взгляните на отличную документацию о том, как фильтровать данные в R. В Интернете есть масса об этом, и это, безусловно, должно вам помочь.





Чтобы узнать, какая часть 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)