有没有办法准确确定某些行何时与其他行重叠?

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

我有一个包含 3 列的数据集:类型(a 和 b)、开始时间和结束时间。我需要查看每种类型 a 行与所有类型 b 重叠的第一个确切数字。这是数据集的示例。开始和结束时间显然代表秒,我想知道类型 a 在类型 b 期间发生的时间点。如果有人对此有任何帮助,将不胜感激!

结构(列表(类型 = c(“a”,“a”,“a”,“a”,“a”,“a”,“a”,“a”, “a”、“a”、“a”、“a”、“a”、“a”、“b”、“b”、“b”、“b”、“b”、“b”、“b” “, “b”、“b”、“b”、“b”、“b”、“b”),开始时间 = c(470, 858, 1330, 942、1084、1320、1374、1817、1394、1469、1561、1796、1880、1882、 508、852、1203、1244、1579、1865、2287、3163、3784、4266、4565、 4936, 5448), 结束时间 = c(485, 873, 1345, 957, 1099, 1335, 1389, 1832、1409、1484、1576、1811、1895、1897、536、919、1216、1285、 1598, 1892, 2355, 3229, 3817, 4303, 4626, 4976, 5497)), row.names = c(NA, -27L), 类 = c("tbl_df", "tbl", "data.frame"))

r intervals
1个回答
0
投票

有多种方法可能会有所帮助,具体取决于您的具体需求。有一些可用的软件包可能提供值得尝试的方法。这些允许您连接或合并具有范围的两个不同数据源。

其中一个包是

fuzzyjoin
,它使用 BiocManager 中的“IRanges”。例如,使用
interval_join
:

# install.packages("BiocManager")

# BiocManager::install("IRanges")

library(fuzzyjoin)

interval_join(df[df$type == "a",], df[df$type == "b",], by = c("starttime", "endtime"))

输出

  type.x starttime.x endtime.x type.y starttime.y endtime.y
  <chr>        <dbl>     <dbl> <chr>        <dbl>     <dbl>
1 a              858       873 b              852       919
2 a             1880      1895 b             1865      1892
3 a             1882      1897 b             1865      1892
© www.soinside.com 2019 - 2024. All rights reserved.