Encontre qual linha de intervalo em um quadro de dados em que cada elemento de um vetor pertence
Eu tenho um vetor de elementos numéricos e um quadro de dados com duas colunas que definem os pontos inicial e final dos intervalos. Cada linha no quadro de dados é um intervalo. Quero descobrir a qual intervalo cada elemento do vetor pertence.
Aqui estão alguns dados de exemplo:
# Find which interval that each element of the vector belongs in
library(tidyverse)
elements <- c(0.1, 0.2, 0.5, 0.9, 1.1, 1.9, 2.1)
intervals <- frame_data(~phase, ~start, ~end,
"a", 0, 0.5,
"b", 1, 1.9,
"c", 2, 2.5)
O mesmo exemplo de dados para aqueles que se opõem ao tidyverse:
elements <- c(0.1, 0.2, 0.5, 0.9, 1.1, 1.9, 2.1)
intervals <- structure(list(phase = c("a", "b", "c"),
start = c(0, 1, 2),
end = c(0.5, 1.9, 2.5)),
.Names = c("phase", "start", "end"),
row.names = c(NA, -3L),
class = "data.frame")
Aqui está uma maneira de fazer isso:
library(intrval)
phases_for_elements <-
map(elements, ~.x %[]% data.frame(intervals[, c('start', 'end')])) %>%
map(., ~unlist(intervals[.x, 'phase']))
Aqui está a saída:
[[1]]
phase
"a"
[[2]]
phase
"a"
[[3]]
phase
"a"
[[4]]
character(0)
[[5]]
phase
"b"
[[6]]
phase
"b"
[[7]]
phase
"c"
Mas estou procurando um método mais simples com menos digitação. eu tenho vistofindInterval
em questões relacionadas, mas não tenho certeza de como posso usá-lo nessa situação.