如果一列中的值落在另一列中的值之间,则组合两个数据帧

时间:2014-04-07 00:35:10

标签: r

我想有一些方法可以用sqldf做到这一点,虽然我不熟悉该软件包的语法,足以让它工作。这是问题所在:

我有两个数据框,每个数据框描述基因组区域并包含一些其他数据。如果在一个df中描述的区域落在另一个df的区域内,我必须将两者结合起来。

一个df,g看起来像这样(虽然我的真实数据有其他列)

      start_position end_position
    1       22926178     22928035
    2       22887317     22889471
    3       22876403     22884442
    4       22862447     22866319
    5       22822490     22827551

另一个,l,看起来像这样(这个样本有一个命名列)

                 name    start      end
101     GRMZM2G001024 11149187 11511198
589     GRMZM2G575546 24382534 24860958
7859    GRMZM2G441511 22762447 23762447
658  AC184765.4_FG005 26282236 26682919
14      GRMZM2G396835 10009264 10402790

如果g中start_position OR end_position列的值落在l的起始范围内,我需要合并两个数据帧,只返回l中具有匹配项的列。我一直在尝试让findInterval()来完成这项工作,但是还没有能够返回合并的DF。有什么想法吗?

我的数据:

g <- structure(list(start_position = c(22926178L, 22887317L, 22876403L, 
22862447L, 22822490L), end_position = c(22928035L, 22889471L, 
22884442L, 22866319L, 22827551L)), .Names = c("start_position", 
"end_position"), row.names = c(NA, 5L), class = "data.frame")

l <- structure(list(name = structure(c(2L, 12L, 9L, 1L, 8L), .Label = c("AC184765.4_FG005", 
"GRMZM2G001024", "GRMZM2G058655", "GRMZM2G072028", "GRMZM2G157132", 
"GRMZM2G160834", "GRMZM2G166507", "GRMZM2G396835", "GRMZM2G441511", 
"GRMZM2G442645", "GRMZM2G572807", "GRMZM2G575546", "GRMZM2G702094"
), class = "factor"), start = c(11149187L, 24382534L, 22762447L, 
26282236L, 10009264L), end = c(11511198L, 24860958L, 23762447L, 
26682919L, 10402790L)), .Names = c("name", "start", "end"), row.names = c(101L, 
589L, 7859L, 658L, 14L), class = "data.frame")

0 个答案:

没有答案