Does that help We could use a data.table join on the 'OD' and assign (:=) the 'F3' column values in 'new' (i.F3) to the 'F3' column in 'old'
new$F3 <- as.integer(new$F3) # as the class for old 'F3' is `integer`
setDT(old)[new, F3 := i.F3, on = .(OD)]
# O D F3 OD
#1: I I 1 I I
#2: A F 16 A F
#3: B C 3 B C
#4: D B 0 D B
#5: R D 13 R D
#6: F G 14 F G
#7: A B 7 A B
this will help Assuming you have a time series of numbers indexed by unique dates, read.zoo in the zoo package does most of that. Read the 5 vignettes that comes with it as well as ?read.zoo and in particular the zoo-read vignette.
Get row indices of data frame A according to multiple matching criteria in that data frame and another data frame, B