Find which interval row in a data frame that each element of a vector belongs in

后端 未结 7 782
一整个雨季
一整个雨季 2020-11-29 06:29

I have a vector of numeric elements, and a dataframe with two columns that define the start and end points of intervals. Each row in the dataframe is one interval. I want to

7条回答
  •  清酒与你
    2020-11-29 06:55

    Just lapply works:

    l <- lapply(elements, function(x){
        intervals$phase[x >= intervals$start & x <= intervals$end]
    })
    
    str(l)
    ## List of 7
    ##  $ : chr "a"
    ##  $ : chr "a"
    ##  $ : chr "a"
    ##  $ : chr(0) 
    ##  $ : chr "b"
    ##  $ : chr "b"
    ##  $ : chr "c"
    

    or in purrr, if you purrrfurrr,

    elements %>% 
        map(~intervals$phase[.x >= intervals$start & .x <= intervals$end]) %>% 
        # Clean up a bit. Shorter, but less readable: map_chr(~.x[1] %||% NA)
        map_chr(~ifelse(length(.x) == 0, NA, .x))
    ## [1] "a" "a" "a" NA  "b" "b" "c"
    

提交回复
热议问题