R: подмножество фрейма данных на основе условий из другого фрейма данных

Вот проблема, которую я пытаюсь решить. Скажем, у меня есть два фрейма данных, как показано ниже:

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))

Они оба содержат столбец с именемid, который связывает фреймы данных. Я хочу иметьmeasurementс изobservationss for whichвремяis betweentime1andtime2from thesampletimesdata frame. Additionally, I'd like to connect the appropriateместоположение` для каждого измерения.

Я успешно сделал это путем преобразования моегоsampletimes в широком формате (т.е. всеtime1 а такжеtime2 информация в одной строке для каждой записиid), объединяя два фрейма данныхid переменной, и используя условные операторы, чтобы принимать только те случаи, когдаtime попадает между по крайней мере один из временных интервалов в строке, а затем назначаяlocation к соответствующему измерению.

Тем не менее, у меня есть около 2 миллионов строк вobservations и это занимает очень много времени. Я ищу лучший способ хранить данные в длинном формате. Пример набора данных очень прост, но в действительности мои данные содержат переменное количество интервалов и местоположений наid.

Для нашего примера фрейм данных, который я хотел бы получить обратно, будет следующим:

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

Ответы на вопрос(2)

Ваш ответ на вопрос