如果我理解正确的话,一个可能的解决方案是用powerjoin package来做power_left_join()
,如果有任何冲突,就从x中‘ Select ’值,例如
library(tidyverse)
# install.packages("powerjoin")
library(powerjoin)
set.seed(42)
A <- sample(1:100, 10)
B <- sample(1:100, 10)
C <- sample(1:100, 10)
year <- sample(1000:2000, 10)
y <- tibble(year, B, C)
x <- tibble(year, A, B)
# change the first "B" value in "x"
x$B[1] <- 1000
x %>%
power_left_join(y, by = "year", conflict = ~.x)
#> # A tibble: 10 × 4
#> year A C B
#> <int> <int> <int> <dbl>
#> 1 1313 49 34 1000
#> 2 1647 65 92 20
#> 3 1291 25 3 26
#> 4 1835 74 58 3
#> 5 1981 18 42 41
#> 6 1145 100 24 89
#> 7 1620 47 30 27
#> 8 1347 24 43 36
#> 9 1196 71 15 5
#> 10 1515 89 22 84
然而,删除".y"列并重命名".x"列的另一种方法并不那么"困难"(这就是我个人使用的).
x %>%
left_join(y, by = "year") %>%
select(-ends_with(".y")) %>%
rename_with(~gsub(".x", "", .x))
#> # A tibble: 10 × 4
#> year A B C
#> <int> <int> <dbl> <int>
#> 1 1313 49 1000 34
#> 2 1647 65 20 92
#> 3 1291 25 26 3
#> 4 1835 74 3 58
#> 5 1981 18 41 42
#> 6 1145 100 89 24
#> 7 1620 47 27 30
#> 8 1347 24 36 43
#> 9 1196 71 5 15
#> 10 1515 89 84 22
创建于2023-07-06年第reprex v2.0.2页