3 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
第一部分是好的,但是在非唯一值的情況下df1,行式for循環(huán)在大型data.frames上不能很好地?cái)U(kuò)展。
您可以使用data.table“更新連接”進(jìn)行適當(dāng)?shù)男薷?,這將非常快:
library(data.table)
setDT(df1); setDT(df2)
df1[df2, on = .(x1), x2 := i.x2]
或者,假設(shè)您不關(guān)心維護(hù)行順序,您可以使用SQL啟發(fā)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
這些中的任何一個(gè)都比行式for-loop更好地?cái)U(kuò)展。
- 3 回答
- 0 關(guān)注
- 889 瀏覽
添加回答
舉報(bào)