我有一个包含 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"))
有多种方法可能会有所帮助,具体取决于您的具体需求。有一些可用的软件包可能提供值得尝试的方法。这些允许您连接或合并具有范围的两个不同数据源。
其中一个包是
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