Encuentre en qué fila de intervalo en un marco de datos pertenece cada elemento de un vector
Tengo un vector de elementos numéricos y un marco de datos con dos columnas que definen los puntos de inicio y final de los intervalos. Cada fila en el marco de datos es un intervalo. Quiero saber a qué intervalo pertenece cada elemento en el vector.
Aquí hay algunos datos de ejemplo:
# 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)
Los mismos datos de ejemplo para aquellos que se oponen al 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")
Aquí hay una forma de hacerlo:
library(intrval)
phases_for_elements <-
map(elements, ~.x %[]% data.frame(intervals[, c('start', 'end')])) %>%
map(., ~unlist(intervals[.x, 'phase']))
Aquí está la salida:
[[1]]
phase
"a"
[[2]]
phase
"a"
[[3]]
phase
"a"
[[4]]
character(0)
[[5]]
phase
"b"
[[6]]
phase
"b"
[[7]]
phase
"c"
Pero estoy buscando un método más simple con menos tipeo. He vistofindInterval
en preguntas relacionadas, pero no estoy seguro de cómo puedo usarlo en esta situación.