R fuzzy anti join match_fun中的表顺序反转

reverse table order in R fuzzy anti join match_fun

提问人:marcelklib 提问时间:7/20/2023 最后编辑:jpsmithmarcelklib 更新时间:7/20/2023 访问量:24

问:

我正在尝试运行此代码:

main_df %>% 
  fuzzy_anti_join(secondary_df, match_fun = list(`==`, `%within%`),
                  by = c("ID","Date" = "Date_Interval"))

问题是它返回以下错误: dplyr::group_by().datacolError in : ! Must group by variables found in . ✖ Column is not found.

我已经知道为什么会这样了。“日期”列位于右侧表“secondary_df”中,“Date_Interval”列位于左侧表“main_df”中。因此,它不会在左侧找到“日期”,反之亦然。

但是,我需要将“main_df”保留为左表,将“secondary_df”保留为右表。我显然不能像这样简单地切换我的连接变量:因为这会破坏目的,我想匹配日期在日期间隔内的位置。by = c("ID","Date_Interval"= "Date")

我也试过这个:

test_df <- main_df %>% 
  fuzzy_anti_join(secondary_df,match_fun = list(`==`, `.y %within% .x`),
                  by = c("ID","Date" = "Date_Interval"))

但它不能正确处理match_fun。我仍然有一种感觉,有一种方法可以解决它,通过改变比赛乐趣的部分来切换桌子,但我还没有找到它。%within%

请帮忙!

r join fuzzyjoin 反联接

评论


答:

0赞 marcelklib 7/20/2023 #1

经过反复试验,我发现这有效:

main_df %>% fuzzy_anti_join(secondary_df, match_fun = list(`==`, function(x, y) y %within% x),
                                             by = c("ID","Date_Interval" = "Date"))

你不能在“by =”参数中更改表格的顺序,这就是为什么我有两个切换Date_Interval和日期。但是,您可以创建一个函数,该函数将在 x 内计算 y,而不是相反。