diff --git a/R/join-rows.R b/R/join-rows.R index 74d4fabc1a..a000f043bc 100644 --- a/R/join-rows.R +++ b/R/join-rows.R @@ -37,6 +37,10 @@ join_rows <- function(x_key, y_key, type = c("inner", "left", "right", "full"), if (type == "right" || type == "full") { miss_x <- !vec_in(y_key, x_key, na_equal = na_equal) + if (!na_equal) { + miss_x[is.na(miss_x)] <- TRUE + } + if (any(miss_x)) { y_extra <- seq_len(vec_size(y_key))[miss_x] } diff --git a/tests/testthat/test-join.r b/tests/testthat/test-join.r index a872f87e44..6aad8085b0 100644 --- a/tests/testthat/test-join.r +++ b/tests/testthat/test-join.r @@ -134,6 +134,19 @@ test_that("joins don't match NA when na_matches = 'never' (#2033)", { out <- anti_join(df1, df2, by = "a", na_matches = "never") expect_equal(out, tibble(a = NA_integer_)) + + dat1 <- tibble( + name = c("a", "c"), + var1 = c(1, 2) + ) + dat3 <- tibble( + name = c("a", NA_character_), + var3 = c(5, 6) + ) + expect_equal( + full_join(dat1, dat3, by = "name", na_matches = "never"), + tibble(name = c("a", "c", NA), var1 = c(1, 2, NA), var3 = c(5, NA, 6)) + ) }) # nest_join ---------------------------------------------------------------