【发布时间】:2012-08-07 04:47:17
【问题描述】:
我在这里发布了一个问题:Matched Range Merge in 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))
所以,如您所见,第 5 行的范围在第 4 行的范围内,第一个文件中的两个 SNP 在第 4 行的范围内,但只有一个在第 4 行的范围内第二行。
包含 SNP 的第一个文件只有约 400 行。然而,包含范围的第二个文件大约有 20K。我想作为输出生成一个数据框,其中包含来自第一个文件(SNP)的行,其中 BP 属于第二个文件中的 BP 范围。如果一个 SNP 属于两个范围,那么它会出现两次,等等。
【问题讨论】:
-
this question 根本没有帮助吗?当您搜索解决方案时,您肯定看到了,不是吗?
-
谢谢,我确实在最初的搜索中看到了这个问题,但我的范围不一定是唯一的,这带来了一个额外的问题。
-
好的。然后,您必须提供一个可重现的示例,说明您的数据的该功能,以便很明显
findInterval不起作用。 (当然还要解释您希望合并如何工作,因为如果范围不是唯一的,则合并的定义不明确。