下面是使用data tables
另一種方法。
連接對數據表非常有效。即使使用這些小數據集,數據表連接速度也快兩倍,但您不會注意到它。對於較大的數據集,差異是巨大的。
# data frames with 200,000 rows, same structure as OP's example
df1 <- data.frame(h1=rep(c("foo","foo","bar","bar"),each=50000),
h2=rep(letters[1:20],1e4),
h3=rep(1:1e4,each=20))
df2 <- data.frame(t1=rep(letters[1:20],1e4),
t2=rep(1:1e4,each=20),
val=rnorm(2e5))
# time the merge (~8.4 sec)
system.time(df.result <-merge(df1, df2, by.x=c('h2', 'h3'), by.y=c('t1', 't2')))
# user system elapsed
# 8.41 0.02 8.42
# convert to data tables and set keys
library(data.table)
dt1 <- data.table(df1, key="h2,h3")
dt2 <- data.table(df2, key="t1,t2")
# time the join (~0.2 sec)
system.time(dt.result <- dt1[dt2])
# user system elapsed
# 0.19 0.00 0.18
底線:數據表連接在大型數據集上要快40倍以上。