R中的条件合并/替换

R中的条件合并/替换

我有两个数据框:


df1

x1  x2

1   a

2   b

3   c

4   d


df2

x1  x2

2   zz

3   qq

我想根据df1 $ x1和df2 $ x2之间的条件匹配,用df2 $ x2中的值替换df1 $ x2中的某些值,以产生:


df1

x1  x2

1   a

2   zz

3   qq

4   d


达令说
浏览 803回答 3
3回答

互换的青春

第一部分是好的,但是在非唯一值的情况下df1,行式for循环在大型data.frames上不能很好地扩展。您可以使用data.table“更新连接”进行适当的修改,这将非常快:library(data.table)setDT(df1); setDT(df2)df1[df2, on = .(x1), x2 := i.x2]或者,假设您不关心维护行顺序,您可以使用SQL启发dplyr:library(dplyr)union_all(  inner_join( df1["x1"], df2 ), # x1 from df1 with matches in df2, x2 from df2  anti_join(  df1, df2["x1"] )  # rows of df1 with no match in df2) # %>% arrange(x1) # optional, won't maintain an arbitrary row order这些中的任何一个都比行式for-loop更好地扩展。
打开App,查看更多内容
随时随地看视频慕课网APP