Algoritmo eficaz para buscar valores por hora en la fila y columna de los nombres de

Por ejemplo, si he de datos.tabla como esta:

              timestamp          A          B         C
 1: 2014-10-04 00:00:00 0.77931331 0.56750899 0.1017191
 2: 2014-10-04 02:10:54 0.79579910 0.37156058 0.9536724
 3: 2014-10-04 04:21:49 0.12088298 0.50284511 0.1332756
 4: 2014-10-04 06:32:43 0.21722767 0.29294422 0.9135702
 5: 2014-10-04 08:43:38 0.50177676 0.01302987 0.4106962
 6: 2014-10-04 10:54:32 0.44592820 0.59690143 0.8262488
 7: 2014-10-04 13:05:27 0.36409504 0.60071189 0.6558466
 8: 2014-10-04 15:16:21 0.36094231 0.90065483 0.2410778
 9: 2014-10-04 17:27:16 0.16668868 0.02374610 0.7664427
10: 2014-10-04 19:38:10 0.29222104 0.47992082 0.6199720
11: 2014-10-04 21:49:05 0.08729134 0.08450253 0.1184836
12: 2014-10-05 00:00:00 0.24222748 0.67493498 0.5414503

Y otros datos.tabla en la que tengo que agregar otra columna que contiene los valores por encima de determinada marca de tiempo y el nombre de la columna:

             timestamp Class
1: 2014-10-04 00:00:00     A
2: 2014-10-04 04:21:49     A
3: 2014-10-04 08:43:38     A
4: 2014-10-04 10:54:32     B
5: 2014-10-04 15:16:21     B
6: 2014-10-04 21:49:05     C

En el que se debe tener este aspecto:

             timestamp class      value
1: 2014-10-04 00:00:00     A 0.77931331
2: 2014-10-04 04:21:49     A 0.12088298
3: 2014-10-04 08:43:38     A 0.50177676
4: 2014-10-04 10:54:32     B 0.59690143
5: 2014-10-04 15:16:21     B 0.90065483
6: 2014-10-04 21:49:05     C 0.11848360

En realidad, mis tablas son bastante largos (de hasta 100.000 filas) y tarda mucho tiempo en ejecutarse cuando he implementado un algoritmo como este:

class.values <- sapply(1:nrow(dt2), function (row) {
  timestamp.tmp <- dt2[row,timestamp]
  class.name <- d2[row,class]
  dt1[timestamp == timestamp.tmp,get(class.name)]
})
dt2[,value := class.values]

Aquí está el código adicional para generar los datos:

library(data.table)

timestamps <- seq(as.POSIXct("2014-10-04"),as.POSIXct("2014-10-05"),length.out = 12)

dt1 <- data.table(
  timestamp = timestamps,
  A = runif(12),
  B = runif(12),
  C = runif(12)
)

dt2 <- data.table(
  timestamp = sort(sample(timestamps,6)),
  class = c("A","A","A","B","B","C")
)