2017-02-09 56 views
0

我有以下两个dataframes:使用“之间”合并dataframes

df1: 
column_01 column_02 
a   3 
b   7 

df2: 
column_01 column_02 column_03 column_04 
a   1   4   a-low 
a   5   8   a-high 
b   1   4   b-low 
b   5   8   b-high 

我不得不合并DF1与DF2的column_04其中DF1的column_01匹配DF2与DF1的column_02的column_01已成为之间df2 column_02和column_03的值。结果将是:

df_result: 
column_01 column_02 column_03 
a   3   a-low 
b   7   b-high 

在sql中它将是一个连接与一个between子句。但是我怎样才能在R中完成这件事?

+2

查看'data.table'包并搜索滚动连接。 –

+0

如果你擅长sql查询,[sqldf](https://cran.r-project.org/web/packages/sqldf/index.html)包可能非常有用。 –

+0

滚动连接是我一直在寻找的术语。谢谢埃里克。 – Kasper

回答

0

您可以分两步进行操作。首先是join,然后是filter。我使用这个包dplyr

df1 <- data.frame(c1 = c('a','b'), 
        c2 = c(3,7)) 

df2 <- data.frame(c1 = c('a','a','b','b'), 
        c2 = c(1,5,1,5), 
        c3 = c(4,8,4,8), 
        c4 = c('al','ah','bl','bh')) 

library(dplyr) 

df1 %>% left_join(df2, by='c1') %>% 
    filter(c2.x > c2.y, c2.x < c3) 
+1

或者使用'过滤器(在(pos,start,end)之间)' – zx8754

+0

谢谢Wietze314和zx8754。作品! – Kasper