我有两个数据框:
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)
为什么订单在这里很重要?
答案 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)))