我想有一些方法可以用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")