R 连接数据帧并用另一列替换一列

R 连接数据帧并用另一列替换一列,r,dplyr,R,Dplyr,我有两个数据帧,一个包含我所有的数据,另一个包含一些数据的正确ID号 当我尝试用左联接、内联接或完全联接来联接这些值时,最终会得到两个ID列(ID.x和ID.y)。是否有必要这样做,以便更正后的数据集中的ID可以简单地替换完整数据集中的ID 例如: df.full有几种情况: 如果您总是需要correctID中的值,只需先从df.full中删除ID列: df.full %>% select(-ID) %>% left_join(correctID, by = "value")

我有两个数据帧,一个包含我所有的数据,另一个包含一些数据的正确ID号

当我尝试用左联接、内联接或完全联接来联接这些值时,最终会得到两个ID列(ID.x和ID.y)。是否有必要这样做,以便更正后的数据集中的ID可以简单地替换完整数据集中的ID

例如:

df.full有几种情况:

如果您总是需要
correctID
中的值,只需先从
df.full
中删除
ID
列:

df.full %>%
  select(-ID) %>%
  left_join(correctID, by = "value")
如果
correctID
不完整,并且您只想在存在时使用它:

df.full %>%
  left_join(correctID, by = "value") %>%
  mutate(ID = coalesce(ID.y, ID.x)) %>%
  select(-ID.y, -ID.x)

当然,您可以在相反的情况下反转此情况(仅当
df.full$ID
缺失时才想使用
correctID

既然您似乎不需要df.full中的列ID,为什么不删除它呢?例如:
df.full$ID In
correctID
列中还有什么可以填充行(NA值?)。如果正确的ID列只是df.full的一个更新的正确版本,就把它替换掉。@JonnyCrunch谢谢你的建议,这也是下面被接受的答案所采用的方法。
correctID[is.na(correctID)]@Chabo我想你的意思更像
df.full$ID[!is.na(correctID$ID)]=correctID$ID[!is.na(df.full$ID)]
,它假定
correctID
NA
s填充,并且与
df.full
的行顺序相同?我想是吧,但那是很多假设。我至少希望在OP joins by的
列中使用
match
,以保持一般性(如果
df.full
重复了
ID
s,如果行被洗牌了一点…
match
将比
dplyr
方法更简洁,但可能没有更高的效率。@Chabo,谢谢你的建议。在我的情况下,正确的ID数据框没有用ID值填充,它只是一个co的列表请更正ID,但我可以看到您的解决方案在不同情况下的工作方式。
df.full %>%
  left_join(correctID, by = "value") %>%
  mutate(ID = coalesce(ID.y, ID.x)) %>%
  select(-ID.y, -ID.x)