Мы можем использовать match
от base R
df1$value[match(df2$code, df1$id)]
Или другой вариант hashmap
library(hashmap)
hp <- hashmap(df1$id, df1$value)
hp[[df2$code]]
На основе примера в ?hashmap
он работает быстрее
microbenchmark::microbenchmark(
"R" = y[match(z, x)],
"H" = H[[z]],
times = 500L
)
#Unit: microseconds
# expr min lq mean median uq max neval
# R 154.197 202.1625 240.5838 229.1625 245.1735 6853.756 500
# H 15.861 19.0235 22.7721 22.4490 24.9670 62.230 500