【发布时间】:2022-01-14 08:32:20
【问题描述】:
这个问题与Efficiently merging two data frames on a non-trivial criteria 和Checking if date is between two dates in r 问题有些相关。我在此处发布的请求是否存在该功能: GitHub issue
我希望使用dplyr::left_join() 加入两个数据框。我用来加入的条件是小于、大于,即<= 和>。 dplyr::left_join() 支持这个功能吗?或者键只在它们之间使用= 运算符。这很容易从 SQL 运行(假设我在数据库中有数据框)
这是一个 MWE:我有两个数据集,一年一次 (fdata),而第二个是每五年发生一次的调查数据。因此,对于两个调查年份之间的fdata 中的所有年份,我都会加入相应的调查年份数据。
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))
test1 <- left_join(fdata, sdata, by = c("fyear" >= "byear","fyear" < "eyear"))
我明白了
Error: cannot join on columns 'TRUE' x 'TRUE': index out of bounds
除非left_join 可以处理该条件,但我的语法缺少什么?
【问题讨论】:
标签: sql r dplyr left-join r-faq