我想使用“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"))
但我没有得到它。
有什么问题?
答案 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)