我的问题如下:假设我有一个包含以下列的现有数据框:UID,foo,result。结果已部分填写。第二个模型现在预测其他行,生成包含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
我现在想通过UID left_join新结果来获取以下结果列:
## Cow
## <NA>
## Pig
## Dog
## Snake
但由于left_join(df_main, new_prediction, by="UID")
创建了result.x
和result.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"))
答案 0 :(得分:2)
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
coalesce
会接受您提供的任意数量的列。如果有多个非缺失值,则较早的列具有优先权。
答案 1 :(得分:1)
添加Gregor使用coalesce
的答案,您还可以“{手动”加入ifelse
列。
left_join(df_main, new_prediction, by = "UID") %>%
mutate(result = ifelse(is.na(result.x),result.y, result.x)) %>%
select(-c(result.x, result.y))
# A tibble: 5 x 3
# UID foo result
# <dbl> <chr> <chr>
# 1 1.00 moo Cow
# 2 2.00 rum <NA>
# 3 3.00 oink Pig
# 4 4.00 woof Dog
# 5 5.00 hiss Snake