r - 使用 if 语句但条件长度大于 1 的连续行之间的差异
问题描述
我见过与我类似的问题,但在这种特定情况下找不到解决方法。
当另一列中的值为负时,我正在尝试计算两个连续行的值之间的差异。如果没有,我想从另一列复制值。
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
}
对此的任何帮助将不胜感激。谢谢!
解决方案
这是一个tidyverse
解决方案:
DPM_356_out_High_loss %>% mutate(no_overlap_len = if_else(Overlap<0, End-lag(Strt), len))
# A tibble: 4 x 6
symbol Strt End len Overlap no_overlap_len
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 TPTE2P4 26508213 26579690 1605 153795 1605
2 CYCSP49 26549425 26549743 319 -30265 41530
3 SLC25A15P1 26586642 26591601 342 36899 342
4 PARP4P1 26594851 26634652 2337 3250 2337
推荐阅读
- sql-server - 在索引视图中使用 FORMATMESSAGE
- apache-spark - map reduce 问题,计算值
- android - WorkManager 为 Result.success() 调用 onStopped()
- javascript - 将 css js 添加到调用简码的插件 wordpress
- reactjs - 如何结合 map 和 setState
- c++ - 使用向量 push_back 时出错
在 C++ 中 - php - php排序分组数组
- typescript - TypeScript 模块增强(再次...)
- angular - ng5-slider 拖动时不更新表单控件值
- reactjs - 编译失败。webpack 不是函数