Я видел подобные вопросы с моим, но не смог найти способ их решения в данном конкретном случае c.
Я пытаюсь сделать разницу между значениями из двух последовательных строк, когда значение в другой столбец отрицательный. Если нет, я хочу скопировать значение из другого столбца.
symbol Strt End len Overlap
121 TPTE2P4 26508213 26579690 1605 153795
46 CYCSP49 26549425 26549743 319 -30265
116 SLC25A15P1 26586642 26591601 342 36899
84 PARP4P1 26594851 26634652 2337 3250
Итак, с приведенной выше датой я пытаюсь сделать разницу между значениями из двух последовательных строк (Конец текущей строки - Начало из предыдущей строки), когда значение в столбце Overlap
является отрицательным. Если нет, я хочу скопировать значение из len
. Я должен ожидать эти результаты в столбце len_no_overlap
:
symbol Strt End len Overlap len_no_overlap
121 TPTE2P4 26508213 26579690 1605 153795 1605
46 CYCSP49 26549425 26549743 319 -30265 **41530**
116 SLC25A15P1 26586642 26591601 342 36899 342
84 PARP4P1 26594851 26634652 2337 3250 2337
Так что в этом случае, только во втором ряду Overlap
является отрицательным, а значение len_no_overlap
получается из 26549743-26508213
.
Я написал код следующим образом, но не могу векторизовать его, чтобы он работал
if (DPM_356_out_High_loss$Overlap < 0) {
DPM_356_out_High_loss$len_no_overlap <- c(NA, tail(DPM_356_out_High_loss$End, -1) head(DPM_356_out_High_loss$Strt, -1))
} else {
DPM_356_out_High_loss$len_no_overlap <- DPM_356_out_High_loss$len
}
Любая помощь с этим была бы очень признательна. Спасибо!