R: subconjunto un marco de datos basado en condiciones de otro marco de datos

Aquí hay un problema que estoy tratando de resolver. Digamos, tengo dos marcos de datos como los siguientes:

observations <- data.frame(id = rep(rep(c(1,2,3,4), each=5), 5),
    time = c(rep(1:5,4), rep(6:10,4), rep(11:15,4), rep(16:20,4), rep(21:25,4)),
    measurement = rnorm(100,5,7))

sampletimes <- data.frame(location = letters[1:20], 
    id = rep(1:4,5),
    time1 = rep(c(2,7,12,17,22), each=4), 
    time2 = rep(c(4,9,14,19,24), each=4))

Ambos contienen una columna llamadaid, que enlaza los marcos de datos. Quiero tener elmeasurements deobservationss for whichhorais betweentiempo1andtiempo2from thetiempos de muestradata frame. Additionally, I'd like to connect the appropriateubicación` a cada medida.

He hecho con éxito esto al convertir misampletimes&nbsp;a un formato ancho (es decir, todas lastime1&nbsp;ytime2&nbsp;información en una fila por entrada paraid), fusionando las dos tramas de datosid&nbsp;variable, y el uso de sentencias condicionales para tomar solo instancias cuando eltime&nbsp;se encuentra entre al menos uno de los intervalos de tiempo en la fila y luego se asignalocation&nbsp;a la medida apropiada.

Sin embargo, tengo alrededor de 2 millones de filas enobservations&nbsp;y hacer esto lleva mucho tiempo. Estoy buscando una mejor manera de mantener los datos en formato largo. El conjunto de datos de ejemplo es muy simple, pero en realidad, mis datos contienen números variables de intervalos y ubicaciones porid.

Para nuestro ejemplo, el marco de datos que espero recuperar sería el siguiente:

id time measurement letters[1:20]
1    3  10.5163892             a
2    3   5.5774119             b
3    3  10.5057060             c
4    3  14.1563179             d
1    8   2.2653761             e
2    8  -1.0905546             f
3    8  12.7434161             g
4    8  17.6129261             h
1   13  10.9234673             i
2   13   1.6974481             j
3   13  -0.3664951             k
4   13  13.8792198             l
1   18   6.5038847             m
2   18   1.2032935             n
3   18  15.0889469             o
4   18   0.8934357             p
1   23   3.6864527             q
2   23   0.2404074             r
3   23  11.6028766             s
4   23  20.7466908             t