Поскольку вам необходимо сравнить (абсолютное значение) разницу между всеми card$ASEC
и log$TIME
, я думаю, что вызов outer
наиболее полезен здесь:
outer(card$ASEC, log$TIME, `-`)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# [1,] 15162 -48 -348 -7268 -16648 -17823 -21175 -21465
# [2,] 14540 -670 -970 -7890 -17270 -18445 -21797 -22087
# [3,] -991 -16201 -16501 -23421 -32801 -33976 -37328 -37618
# [4,] 31783 16573 16273 9353 -27 -1202 -4554 -4844
# [5,] 15466 256 -44 -6964 -16344 -17519 -20871 -21161
Мы можем быстро уменьшить это(на строку), чтобы найти минимальное абсолютное значение:
( ind <- apply(abs(outer(card$ASEC, log$TIME, `-`)), 1, which.min) )
# [1] 2 2 1 5 3
cbind.data.frame(card, log[ind,], stringsAsFactors=FALSE)
# id BSTN ASTN BSEC ASEC TRNID ASTN TIME
# 2 201557 151 150 60633 61302 2 150 61350
# 2.1 201558 151 150 60159 60680 2 150 61350
# 1 201559 151 150 44757 45149 1 150 46140
# 5 201560 151 150 77551 77923 5 150 77950
# 3 201561 151 150 61160 61606 3 150 61650