首页 > 解决方案 > dplyr 连接 - where 子句中的算术

问题描述

我正在尝试将算术添加到我的 dplyr 连接中的 where 子句。我认为这些被称为过滤连接。在我的示例中,我希望表 sdata 和 fdata ON val 和 id。但我只想加入 val > id 的行。

# DATASET GENERATION
    id <- c(1,1,1,1,
            2,2,2,2,2,2,
            3,3,3,3,3,3,
            5,5,5,5,
            8,8,8,8,
            13,13,13)

    fyear <- c(1998,1999,2000,2001,1998,1999,2000,2001,2002,2003,
               1998,1999,2000,2001,2002,2003,1998,1999,2000,2001,
               1998,1999,2000,2001,1998,1999,2000)

    byear <- c(1990,1995,2000,2005)
    eyear <- c(1995,2000,2005,2010)
    val <- c(3,1,5,6)

    sdata <- tbl_df(data.frame(byear, eyear, val))
    fdata <- tbl_df(data.frame(id, fyear))

# PSEUDO CODE FOR RESULT I AM TRYING TO ACHIEVE        
    inner_join(sdata, fdata, by=c("val"<"id"))

任何帮助,将不胜感激

标签: rdplyr

解决方案


您可以使用包blurjoin

library(fuzzyjoin)
fuzzy_inner_join(sdata, fdata, by=c("val"="id"),`<`)
# A tibble: 48 x 5
#    byear eyear   val    id fyear
#    <dbl> <dbl> <dbl> <dbl> <dbl>
#  1  1990  1995     3     5  1998
#  2  1990  1995     3     5  1999
#  3  1990  1995     3     5  2000
#  4  1990  1995     3     5  2001
#  5  1990  1995     3     8  1998
#  6  1990  1995     3     8  1999
#  7  1990  1995     3     8  2000
#  8  1990  1995     3     8  2001
#  9  1990  1995     3    13  1998
# 10  1990  1995     3    13  1999

推荐阅读