gpt4 book ai didi

r - dplyr left_join by 小于,大于条件

转载 作者:行者123 更新时间:2023-11-29 11:10:29 24 4
gpt4 key购买 nike

这个问题与issues 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()支持这个功能?或者 key 只带 =他们之间的运营商。这很容易从 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可以处理这种情况,但我的语法缺少某些东西?

最佳答案

data.table 从 v 1.9.8 开始添加非等值连接

library(data.table) #v>=1.9.8
setDT(sdata); setDT(fdata) # converting to data.table in place

fdata[sdata, on = .(fyear >= byear, fyear < eyear), nomatch = 0,
.(id, x.fyear, byear, eyear, val)]
# id x.fyear byear eyear val
# 1: 1 1998 1995 2000 1
# 2: 2 1998 1995 2000 1
# 3: 3 1998 1995 2000 1
# 4: 5 1998 1995 2000 1
# 5: 8 1998 1995 2000 1
# 6: 13 1998 1995 2000 1
# 7: 1 1999 1995 2000 1
# 8: 2 1999 1995 2000 1
# 9: 3 1999 1995 2000 1
#10: 5 1999 1995 2000 1
#11: 8 1999 1995 2000 1
#12: 13 1999 1995 2000 1
#13: 1 2000 2000 2005 5
#14: 2 2000 2000 2005 5
#15: 3 2000 2000 2005 5
#16: 5 2000 2000 2005 5
#17: 8 2000 2000 2005 5
#18: 13 2000 2000 2005 5
#19: 1 2001 2000 2005 5
#20: 2 2001 2000 2005 5
#21: 3 2001 2000 2005 5
#22: 5 2001 2000 2005 5
#23: 8 2001 2000 2005 5
#24: 2 2002 2000 2005 5
#25: 3 2002 2000 2005 5
#26: 2 2003 2000 2005 5
#27: 3 2003 2000 2005 5
# id x.fyear byear eyear val

您还可以通过 1.9.6 中的 foverlaps 来使用它,但需要付出更多的努力。

关于r - dplyr left_join by 小于,大于条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37289405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com