仅当列数值与R中的第二个数据帧范围匹配时,才将列值打印到新数据帧的行

时间:2014-02-04 19:31:07

标签: r

我有两个数据框,如果值与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

非常感谢任何帮助。

1 个答案:

答案 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
相关问题