我有两个数据框,如果值与df2附近的范围匹配,我想从df1中的列打印到新的df /矩阵的行。请参阅下面的示例。
DF1
Chr Coord Value
1 25 10
1 75 20
1 125 15
1 175 30
2 25 16
2 75 25
2 125 50
2 175 100
2 225 150
DF2
Chr Coord
1 75
2 125
我需要的是:
(df1$Chr == df2$Chr & df1$Coord <= df$2Coord +50 & df1$Coord is >= df2$coord -50)
然后打印
df1$Value to it's own row of a new data frame or matrix.
我需要的最终输出是:
DF3
10 20 15
25 50 100
非常感谢任何帮助。
答案 0 :(得分:0)
我可能错了,但看起来你正在使用遗传范围(假设Chr
=染色体)。如果是这样,您应该查看Bioconductor的GenomicRanges包。它提供了用生物元数据表示远程数据的类,并包括基于它们与另一组范围的重叠来对一组范围进行子集化的方法。
首先,您需要将data.frames转换为GRanges
个对象:
library(GenomicRanges)
gr1 <- GRanges(seqnames = df1$Chr,
IRanges(start = df1$Coord, width = 1),
Value = df1$Value)
gr2 <- GRanges(seqnames = df2$Chr,
IRanges(start = df2$Coord, width = 1),
Value = df2$Value)
然后使用subsetByOverlaps()
和maxgap
参数来表示我们正在寻找50以内的范围:
df3 <- subsetByOverlaps(gr1, gr2, maxgap = 50)
摘录Value
的{{1}}列:
df3
最终输出:
df3$Value