По "слишком много столбцов, таких как"". Вы имеете в виду, что хотите найти все столбцы, общие для обоих источников? В таком случае, почему бы не использовать буквально пересечение (поведение по умолчанию)?
## two data.frames, only id = 3, a = 4 matches
(df1 <- data.frame(id = 1:3, a = 2:4, b = 3:5))
#> id a b
#> 1 1 2 3
#> 2 2 3 4
#> 3 3 4 5
(df2 <- data.frame(id = 3:2, a = 4:5, c = 1:2))
#> id a c
#> 1 3 4 1
#> 2 2 5 2
## this produces a.x and a.y
dplyr::left_join(df1, df2, by = "id")
#> id a.x b a.y c
#> 1 1 2 3 NA NA
#> 2 2 3 4 5 2
#> 3 3 4 5 4 1
## which columns are common?
intersect(names(df1), names(df2))
#> [1] "id" "a"
## this produces id, a, b, c
dplyr::left_join(df1, df2, by = intersect(names(df1), names(df2)))
#> id a b c
#> 1 1 2 3 NA
#> 2 2 3 4 NA
#> 3 3 4 5 1
## this is, however, the default behaviour for left_join
## i.e. use all columns which are present in both
dplyr::left_join(df1, df2)
#> Joining, by = c("id", "a")
#> id a b c
#> 1 1 2 3 NA
#> 2 2 3 4 NA
#> 3 3 4 5 1
Создано 06.05.2020 с помощью пакета (v0.3.0)