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

后端 未结 7 822
一整个雨季
一整个雨季 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:44

    Here's a possible solution using the new "non-equi" joins in data.table (v>=1.9.8). While I doubt you'll like the syntax, it should be very efficient soluion.

    Also, regarding findInterval, this function assumes continuity in your intervals, while this isn't the case here, so I doubt there is a straightforward solution using it.

    library(data.table) #v1.10.0
    setDT(intervals)[data.table(elements), on = .(start <= elements, end >= elements)]
    #    phase start end
    # 1:     a   0.1 0.1
    # 2:     a   0.2 0.2
    # 3:     a   0.5 0.5
    # 4:    NA   0.9 0.9
    # 5:     b   1.1 1.1
    # 6:     b   1.9 1.9
    # 7:     c   2.1 2.1
    

    Regarding the above code, I find it pretty self-explanatory: Join intervals and elements by the condition specified in the on operator. That's pretty much it.

    There is a certain caveat here though, start, end and elements should be all of the same type, so if one of them is integer, it should be converted to numeric first.

提交回复
热议问题