dplyr联接在R中的重复警告

dplyr联接在R中的重复警告,r,dplyr,R,Dplyr,我使用了大量的dplyr::left_join(),有时我没有注意到第二个表中的重复记录会导致多个匹配(并且主表的行数比我开始的多) 我很想知道,当这种情况发生时,R是否有办法发出警告信息。还是我只是懒惰?我是否应该更加小心以确保我没有使用具有重复记录的表?一种方法是使用您自己版本的left\u join,其中比较行数: my_left_join <- function(x, y, ...){ res <- dplyr::left_join(x, y, ...) if (n

我使用了大量的
dplyr::left_join()
,有时我没有注意到第二个表中的重复记录会导致多个匹配(并且主表的行数比我开始的多)


我很想知道,当这种情况发生时,R是否有办法发出警告信息。还是我只是懒惰?我是否应该更加小心以确保我没有使用具有重复记录的表?

一种方法是使用您自己版本的
left\u join
,其中比较行数:

my_left_join <- function(x, y, ...){
  res <- dplyr::left_join(x, y, ...)

  if (nrow(res) > nrow(x)) warning("Duplicated records found")
  return(res)  
}

data.table版本在执行完全联接时发出警告。但我认为,在联接两个表之前,应该始终手动检查重复项,除非您知道正在执行一对多联接。并始终检查输出是否符合您的期望。这是常识。如果以编程方式进行一对一连接,我强烈建议您在连接之前添加重复项检查,如果存在重复项,则会发出警告。就我的2美分。:)+1票赞成。我认为很多R用户没有利用你可以编写自己的函数这一事实,不像其他商业软件。哦,谢谢。这是一个非常简单的解决方案。今天我将在我正在制作的一个脚本@Edward I agree上试一试。我自己也为此感到内疚。我没有尽可能多地使用用户定义的函数。工作非常完美,我甚至修改了它,使用beep:beep()同时发出噪音(因为在运行大型脚本且控制台输出快速滚动时,很容易忽略警告)
a <- tibble(id = 1:3)
b <- tibble(id = c(1:3, 1), val = 7:10)


a %>% dplyr::left_join(b, by = "id")
a %>% my_left_join(b, by = "id")