On Fri, 13 Sep 2013, William Dunlap wrote:

findInterval(thresholds, values)
[1] 1 4 4 4 7

Thanks a lot! But now I have a new problem, a typical R issue perhaps.

First, let's look at  a successful case:

        > thresholds <- c(1,3,5,7,9)
        > values <- c(0.854, 1.648, 1.829, 1.874, 7.670, 7.673, 7.722)
        > values[findInterval(thresholds, values)]
        [1] 0.854 1.874 1.874 1.874 7.722

Then a new batch of values came, notice only the first element of new values differ:

        > thresholds <- c(1,3,5,7,9)
        > values <- c(1.254, 1.648, 1.829, 1.874, 7.670, 7.673, 7.722)
        > findInterval(thresholds, values)
        [1] 0 4 4 4 7
        > values[findInterval(thresholds, values)]
        [1] 1.874 1.874 1.874 7.722

This is a surprise. The desirable output is:

        [1] 0     1.874 1.874 1.874 7.722

This is desirable, because so maintains the same number of elements during calculation. (You may suggest leaving out the indices and try to calculate maximum-values-below-threshold directly, but the indices are useful to address other fields in the data frame whence values came.)

This problem can be simplified as following:

in R, we have:
        > a <- 1:10
        > a[c(1,3)]
        [1] 1 3
        > a[c(0,3)]
        [1] 3

While I was hoping to get:
        > a <- 1:10
        > a[c(1,3)]
        [1] 1 3
        > a[c(0,3)]
        [1] 0 3

The straightforward solution, is to shift the whole test values one position, so that the first value is always zero:

        > values <- c(0, 1.254, 1.648, 1.829, 1.874, 7.670, 7.673, 7.722)

This solution, despite begetting a train of changes elsewhere in the code, is semantically wrong, since the first element of values should be the first value, now it is actually the 0-th value.

What would you do in the case?

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to