R: subconjunto de um quadro de dados com base nas condições de outro quadro de dados

Aqui está um problema que estou tentando resolver. Diga, eu tenho dois quadros de dados como o seguinte:

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 contêm uma coluna chamadaid, que liga os quadros de dados. Eu quero ter omeasurements deobservationss for whichTempois betweentime1andtime2from thesampletimesdata frame. Additionally, I'd like to connect the appropriatelocalização »para cada medição.

Eu consegui fazer isso convertendo meusampletimes para um formato amplo (ou seja, todos ostime1 etime2 informações em uma linha por entrada paraid), fundindo os dois quadros de dados peloid variável, e usando declarações condicionais para tomar apenas instâncias quando otime fica entre pelo menos um dos intervalos de tempo na linha e, em seguida, atribuilocation para a medição apropriada.

No entanto, tenho cerca de 2 milhões de linhas emobservations e fazer isso leva muito tempo. Estou procurando uma maneira melhor de manter os dados em formato longo. O conjunto de dados de exemplo é muito simples, mas, na realidade, meus dados contêm números variáveis ​​de intervalos e locais porid.

Para o nosso exemplo, o quadro de dados que espero recuperar é o seguinte:

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

questionAnswers(2)

yourAnswerToTheQuestion