我在这里发布了一个问题:R中的匹配范围合并关于根据落入第二个文件中的范围的一个文件中的数字合并两个文件.到目前为止,我没有成功拼凑代码来实现这一目标.我遇到的问题是我正在使用的代码逐行比较文件.这是一个问题,因为1.)一个文件比另一个文件长得多,并且2.)我需要较短文件中的行扫描较长文件中的每个范围对 - 而不仅仅是同一行中的范围.
我一直在使用原始问题中发布的函数,我觉得应该有一种方法将它应用到一个更通用的循环,将第一个文件中的每一行与第二个文件中的每一行进行比较,但我没有'我想通了.如果有人有任何建议,我将不胜感激.
****已编辑.
数据的性质是这样的:每个范围不一定是唯一的,尽管大多数是.它们的大小也不相同,有些完全属于其他类型.findInterval因此产生错误,因为范围不能排序以便以"非降序"顺序排列.
以下是每个数据框的前6行:
file1test <- data.frame(SNP=c("rs2343", "rs211", "rs754", "rs854", "rs343", "rs626"), BP=c(860269, 369640, 861822, 367934, 706940, 717244))
file2 <- data.frame(Gene=c("E613", "E92", "E49", "E3543", "E11", "E233"), BP_start=c(367640, 621059, 721320, 860260, 861322, 879584), BP_end = c(368634, 622053, 722513, 879955, 879533, 894689))
Run Code Online (Sandbox Code Playgroud)
因此,正如您所看到的,第5行的范围位于第4行的范围内,第一行的两个SNP落在第4行的范围内,但只有一个属于第二行的范围.
第一个包含SNP的文件只有大约400行.但是,包含范围的第二个文件大约有20K.我想要作为输出产生的是一个数据框,其中包含来自第一个文件(SNP)的行,其中BP属于第二个文件中的BP范围.如果SNP落入两个范围,那么它将出现两次,等等.