我有2个文件:
“query.tab“
grp pos
1 10
1 45
2 6
3 12
“data.tab“
grp start end info
1 1 15 blue
1 23 60 red
2 1 40 green
3 20 30 black
我正尝试将$info
从文件“data”添加到文件“query”,只有在
1.“查询”中的$grp
与“数据”中的$grp
匹配
1.从query.tab
到$pos
福尔斯从data.tab
到$start
和$end
之间。
为了得到:
grp pos info
1 10 blue
1 45 red
2 6 green
3 12 NA
(注:非重叠的$info
可以是'NA'或空白,这并不重要。无论如何都不应该发生)
到目前为止,我正在使用findOverlaps()
,但在理解如何操作其输出时遇到了麻烦:
library(IRanges)
query =data.frame(grp = as.numeric(c("1", "1", "2", "3")), pos = as.numeric(c("10", "45", "6", "12")))
data = data.frame(grp=as.numeric(c("1", "1", "2", "3")), start=as.numeric(c("1", "23", "1", "20")), end=as.numeric(c("15", "60", "40", "30")), info=c("blue", "red", "green", "black"))
query.ir <- IRanges(start = query$pos, end = query$pos, names = query$grp)
data.ir <- IRanges(start = data$start, end = data$end, names = data$grp)
o <- findOverlaps(query.ir, data.ir, type = "within")
o
Hits object with 7 hits and 0 metadata columns:
queryHits subjectHits
<integer> <integer>
[1] 1 3
[2] 1 1
[3] 2 2
[4] 3 3
[5] 3 1
[6] 4 3
[7] 4 1
-------
queryLength: 4 / subjectLength: 4
我可以从这个输出中检索$info
字段吗?还是我在错误的轨道上?
1条答案
按热度按时间vjhs03f71#
根据你所提出的预期输出,我认为这将工作。它也可以总结,但我更喜欢这个版本,以避免任何混乱;
数据: