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.

Respuestas a la pregunta(7)

Su respuesta a la pregunta