我有一个像这样的数据框...
df = tibble(id = c(64512, 64513, 64514, 64515),
customer=c("a", "a", "b", "b"))
Run Code Online (Sandbox Code Playgroud)
并希望通过id这样的方式加入另外两个数据框...
uvp_new = tibble(id=c(64512, 64513, 64514), uvp=c(12, 14, 16))
uvp_old = tibble(id=c(64512, 64515), uvp=c(10, 18))
Run Code Online (Sandbox Code Playgroud)
具有以下逻辑:每当有 a uvpin条目时uvp_new,我想采用这个(忽略uvp_old),如果没有uvpin条目uvp_new,我想采用uvpfrom条目uvp_old。
任何帮助表示赞赏
您可以left_join() uvp_old然后使用rows_update()with uvp_new:
library(dplyr)
df %>%
left_join(uvp_old, by = "id") %>%
rows_update(uvp_new, by = "id")
# A tibble: 4 x 3
id customer uvp
<dbl> <chr> <dbl>
1 64512 a 12
2 64513 a 14
3 64514 b 16
4 64515 b 18
Run Code Online (Sandbox Code Playgroud)
或者,如果首先df使用重复的 idrows_upsert()并将结果连接到df:
uvp_old %>%
rows_upsert(uvp_new, by = "id") %>%
right_join(df, by = "id")
Run Code Online (Sandbox Code Playgroud)