互换的青春
第一部分是好的,但是在非唯一值的情况下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更好地扩展。