Я не уверен, как именно ваши данные структурированы, но, возможно, это может быть полезно. Если я не согласен с этим, приношу свои извинения (и быстро удалю ответ).
Скажем, у вас есть два фрейма данных, один с start
и end
раз в mse c, а второй с указанными c start.time
mse c значениями.
С помощью dplyr
вы можете сделать:
library(dplyr)
vid_data %>%
mutate(flag = 1) %>%
full_join(data %>% mutate(flag = 1), by = "flag") %>%
dplyr::filter(between(start.time, start, end)) %>%
distinct() %>%
dplyr::select(-flag)
С большим количеством данных вы можете сделать что-то быстрее с data.table
:
library(data.table)
setDT(vid_data)
setDT(data)
vid_data[data, on = .(start < start.time, end > start.time), .(id, frame, start.time), nomatch = 0]
Пример данных :
vid_data <- data.frame(
id = 1:3,
start = c(380000, 398000, 401000),
end = c(387000, 406000, 412000)
)
data <- data.frame(
frame = c(1,2,3,4,5),
start.time = c(379000,381000,385000,403000,410000)
)
Выход : С dplyr
и data.table
соответственно:
id start end frame start.time
1 1 380000 387000 2 381000
2 1 380000 387000 3 385000
3 2 398000 406000 4 403000
4 3 401000 412000 4 403000
5 3 401000 412000 5 410000
id frame start.time
1: 1 2 381000
2: 1 3 385000
3: 2 4 403000
4: 3 4 403000
5: 3 5 410000