【问题标题】:Inner_join two dataframes when year on the RHS is 1-3 years after the Year on the LHS当 RHS 上的年份在 LHS 上的年份之后 1-3 年时,Inner_join 两个数据帧
【发布时间】:2019-10-23 19:38:27
【问题描述】:

只要 RHS 上的年份在 LHS 上的年份之后 1-3 年,我想加入两个具有索引和年份的数据框。例如,数据框df_lhs 是

A   index   Year
1   A   12/31/2012
3   B   12/31/2011
5   C   12/31/2009

df_rhs 是

B   index   Year
5   A   12/31/2001
6   B   12/31/2010
2   C   12/31/2011

我希望生成的 inner_join 包含:

A   index   Year_left   Year_right
5   C   12/31/2009  12/31/2011

这是我尝试过的

df = inner_join(df_lhs, df_rhs, by = c('index','Year'), suffix = c(".left", ".right"))

代码不起作用。也许我根本不应该考虑使用inner_join?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:
    library(dplyr)
    library(tidyr)
    
    df_lhs %>% 
      separate(Year, sep = "/", into = c("m", "d", "y"), remove = F) %>% 
      inner_join(., {df_rhs%>% 
                       separate(Year, sep = "/", into = c("m", "d", "y"), remove = F)}, 
                 by = c('index','m', 'd'), suffix = c(".left", ".right")) %>% 
      filter((as.numeric(y.right) - as.numeric(y.left)) %in% 1:3) %>% 
      select(A, B, index, Year.left, Year.right)
    
    #>   A B index  Year.left Year.right
    #> 1 5 2     C 12/31/2009 12/31/2011
    

    【讨论】:

      【解决方案2】:

      你可以做一个简单的加入/合并,然后过滤掉满足你条件的行(这里是 1-3 年)。

      下面是基于多个ID合并两个数据框的代码。

      merge(df_lhs,data df_rhs,by=c("index","Year"))
      
      

      在此之后,您将获得简单的合并,然后您可以根据某些条件(例如 1-3 年之间的日期差异)进行过滤。

      这只是一个建议。我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2017-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多