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

时间:2016-05-20 02:46:41

标签: r

我想使用“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"))

但我没有得到它。

有什么问题?

2 个答案:

答案 0 :(得分:2)

我猜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]

答案 1 :(得分:0)

这可能会被清除。这是使用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)