R语言fuzzy_anti_join保持表顺序时匹配逻辑调整求助
解决方案
要实现保持main_df为左表、secondary_df为右表,同时匹配右表Date处于左表Date_Interval区间内的模糊反连接,需要调整by参数的列对应关系,并自定义匹配函数来反转参数顺序:
test_df <- main_df %>% fuzzy_anti_join( secondary_df, match_fun = list( `==`, # ID列精确匹配 function(x, y) y %within% x # x=左表Date_Interval,y=右表Date,判断y是否在x区间内 ), by = c("ID" = "ID", "Date_Interval" = "Date") # 严格遵循「左表列 = 右表列」的对应规则 )
关键细节解释
by参数的格式要求是左表列名 = 右表列名,这里明确左表的Date_Interval对应右表的Date,左表ID对应右表ID,解决了原代码中列查找失败的问题。- 默认情况下
match_fun的逻辑是左表列(x)与右表列(y)比较(比如x %within% y),而我们需要的是右表列匹配左表区间,因此通过自定义函数function(x, y) y %within% x明确反转了参数顺序,实现需求中的匹配逻辑。 - 直接在
match_fun中写.y %within% .x无效,因为该参数需要传入可执行的函数对象,而非表达式。
内容的提问来源于stack exchange,提问作者marcelklib
相关产品推荐
相关产品推荐

