2017-02-09 13 views
0

「間」を使用してデータフレームをマージします:私は、次の2つのデータフレーム持って

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 

私はDF2のcolumn_04でDF1をマージする必要があり、DF1のcolumn_01がDF1のDF2と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

これは2つの手順で実行できます。最初に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

または 'filter(between(pos、start、end)) 'を使用してください。 – zx8754

+0

Wietze314とzx8754に感謝します。作品! – Kasper

関連する問題