合并 R 中相同范围的列中的行

问题描述 投票:0回答:1

我有包含开始值和结束值的数据文件以及另一列包含 0 和 1 的数据。

0:一行的结束值与下一行的起始值不重合 1:如果一行的结束值与下一行的起始值一致

chr 开始 结束 价值
1 1000 5000 0
1 5500 5800 1
1 5700 6300 1
1 6500 7000 0
1 7200 8000 0
1 7500 9000 1
1

我想根据开始和结束的重合方式合并行。

chr 开始 结束 价值
1 1000 5000 0
1 5500 6300 1
1 6500 7000 0
1 7200 9000 0

我正在努力找出合并这些列的策略。如有任何帮助,我们将不胜感激。

r sorting merge
1个回答
0
投票

我不确定我完全理解规则是什么,但这给出了与问题中显示的预期数据框相同的结果。 (输入在最后的注释中可重复定义。)

library(dplyr)

DF2 <- DF %>%
  mutate(run = cumsum(lead(value, default = 0) == 1 | value == 0)) %>%
  summarize(start = min(start), end = max(end), value = first(value), 
    .by = c(chr, run)) %>%
  select(-run)

identical(DF2, target)
## [1] TRUE

注意

DF <- data.frame(
  chr = rep(1L, 6L),
  start = c(1000L, 5500L, 5700L, 6500L, 7200L, 7500L),
  end = c(5000L, 5800L, 6300L, 7000L, 8000L, 9000L),
  value = c(0L, 1L, 1L, 0L, 0L, 1L)
)
target <- data.frame(
  chr = rep(1L, 4L),
  start = c(1000L, 5500L, 6500L, 7200L),
  end = c(5000L, 6300L, 7000L, 9000L),
  value = c(0L, 1L, 0L, 0L)
)
© www.soinside.com 2019 - 2024. All rights reserved.