如何使用"merge"将表中的某些记录替换为另一个表?



我想使用"merge"将表 t1 中的"O"替换为表 t2:

t1<-data.frame(x1=c(1,2,3,4,5),x2=c("a","O","O","b","a"))
t2<-data.frame(x1=c(2,3),x2=c("a","b"))
first <- merge(t1["x2"=="O",],t2,by="x1")

结果应该是这样的:

t1<-data.frame(x1=c(1,2,3,4,5),x2=c("a","a","b""b","a"))

但我不明白。

怎么了?

我想merge在这里很混乱(我不会弄乱这个"O"编码)。你可以做

m = match(t1$x1, t2$x1)
t1$x2[ !is.na(m) ] <- t2$x2[ m[!is.na(m)] ]

这不会扩展到合并超过一列,所以我推荐 data.table:

library(data.table)
setDT(t1)[t2, on="x1", x2 := i.x2]

这可能可以清理。这是使用dplyr

first = left_join(t1, t2, by = "x1") %>%
  mutate(x2 = ifelse(x2.x == "O", as.character(x2.y), as.character(x2.x))) %>%
  select(x1, x2)

最新更新