在间隔的第二个数据帧中从一个数据帧列中搜索值

时间:2017-01-25 03:25:11

标签: r search dataframe

我有两个数据框:

CHR  POS
10   289968
10   580270

CHR  START  STOP
10   250000 300000
10   700422 700500

搜索#1

> subset(df1, CHR==df2$CHR & POS >= df2$START & POS <= df2$STOP)
    CHR POS
  1 10  289968

但如果我在df2中翻转行的顺序,则搜索不起作用。例如,df2现在就像这样

CHR  START  STOP
10   700422 700500
10   250000 300000

    > subset(df1, CHR==df2$CHR & POS >= df2$START & POS <= df2$STOP)
    [1] CHR POS
    <0 rows> (or 0-length row.names)

为什么订单在这里很重要?

1 个答案:

答案 0 :(得分:1)

如果问题没有留空,我只是发布答案。

对于df1的每一行,您需要根据条件检查df2的任何行是否满足给定条件START <= POS <= STOP和子集df1

步骤如下 1.对sapply的每一行使用df1和检查功能。
2.使用subset

进行子集化
subset(df1, sapply(1:nrow(df1), 
       function(i) any(df1$CHR[i] == df2$CHR & df1$POS[i] >= df2$START & df1$POS[i] <= df2$STOP)))