r - 使用旧数据更新新数据中的值

标签 r dplyr

我有以下数据框:

library(dplyr)

old_data = data.frame(id = c(1,2,3), var1 = c(11,12,13))

> old_data

  id var1
1  1   11
2  2   12
3  3   13

我想用“new_data”中的数据替换“old_data”第二行中的值(即,id 变量匹配的“old_data”中的行):

new_data = data.frame(id = c(4,2,5), var1 = c(11,15,13))

> new_data

  id var1
1  4   11
2  2   15
3  5   13

使用此处找到的答案 ( Update rows of data frame in R ),我尝试使用“dplyr”库执行此操作:

update =  old_data %>%
     rows_update(new_data, by = "id")

但这给了我以下错误:

Error: Attempting to update missing rows.
Run `rlang::last_error()` to see where the error occurred.

这就是我想要得到的:

   id var1
    1  1   11
    2  2   15
    3  3   13

有人可以告诉我我做错了什么吗?

谢谢!

最佳答案

有点乱,但这有效(至少在这个样本数据上)

old_data %>% 
  left_join(new_data,by="id") %>% 
  mutate(var1 = if_else(!is.na(var1.y),var1.y,var1.x)) %>% 
  select(id,var1)

#  id var1
#1  1   11
#2  2   15
#3  3   13

关于r - 使用旧数据更新新数据中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70515105/

相关文章:

r - 将Zoo转换为数据框

r - 有没有一种简洁的方法来忽略几行并使用汇总函数?

R mlr 包 - 是否可以保存参数调整中的所有模型?

python - 如何从 R 中的文本文件中删除行?

r - 广义线性混合模型中的事后测试 : how to do?

r - 如何替换R中列中的数据?

r - dplyr::manip:如何使用字符串参数(保存列名)而不是列名

sql - dplyr 与 dbplyr 带空格过滤

r - 为什么排名函数对所有国家都给予同等的排名?

r - adehabitat 包的位置数据格式