left_join R 数据帧,将两列与 NA 合并

Tho*_*mas 5 join r left-join dplyr

我的问题如下:假设我有一个现有的数据框,其中包含以下列:UID、foo、结果。结果已部分填写。第二个模型现在预测额外的行,生成包含 UID 和结果列的第二个数据帧:(在底部重现的代码)

## df_main
##    UID   foo result
##  <dbl> <chr>  <chr>
## 1     1   moo    Cow
## 2     2   rum   <NA>
## 3     3  oink   <NA>
## 4     4  woof    Dog
## 5     5  hiss   <NA>

## new_prediction
##    UID result
##  <dbl>  <chr>
## 1     3    Pig
## 2     5  Snake
Run Code Online (Sandbox Code Playgroud)

我现在想通过 UID 对新结果进行 left_join 以获得以下结果列:

## Cow
## <NA>
## Pig
## Dog
## Snake
Run Code Online (Sandbox Code Playgroud)

但我无法让它发挥作用,因为left_join(df_main, new_prediction, by="UID")创建了result.xresult.y。有没有办法用 dplyr 来做到这一点,或者是加入列的第二步?我查看了各种函数,但最终决定手动循环所有行。我很确定有一种更“R”的方法可以做到这一点?

数据框代码:

df_main <- tibble(UID = c(1,2,3,4,5), foo=c("moo", "rum", "oink", "woof", "hiss"), result=c("Cow", NA, NA, "Dog", NA))
new_prediction <- tibble(UID = c(3,5), result = c("Pig", "Snake"))
Run Code Online (Sandbox Code Playgroud)

Gre*_*gor 6

coalesce是你的第二步。

left_join(df_main, new_prediction, by="UID") %>%
  mutate(result = coalesce(result.x, result.y)) %>%
  select(-result.x, -result.y)
# # A tibble: 5 x 3
#     UID   foo result
#   <dbl> <chr>  <chr>
# 1     1   moo    Cow
# 2     2   rum   <NA>
# 3     3  oink    Pig
# 4     4  woof    Dog
# 5     5  hiss  Snake
Run Code Online (Sandbox Code Playgroud)

coalesce将接受您提供的尽可能多的列。如果存在多个非缺失值,较早的列优先。