[R] Subsetting dataframe by the nearest values of a vector elements

David Winsemius dwinsemius at comcast.net
Tue Nov 10 03:17:18 CET 2015


> On Nov 9, 2015, at 9:19 AM, Adams, Jean <jvadams at usgs.gov> wrote:
> 
> Harun,
> 
> Can you give a simple example?
> 
> If your cross_section looked like this
> c(144, 179, 214, 39, 284, 109, 74, 4, 249)
> and your other vector looked like this
> c(0, 50, 100, 150, 200, 250, 300, 350)
> what would you want your subset to look like?
> 
> Jean
> 
> On Mon, Nov 9, 2015 at 7:26 AM, Harun Rashid via R-help <
> r-help at r-project.org> wrote:
> 
>> Hello,
>> I have a dataset with two columns 1. cross_section (range: 0~635), and
>> 2. elevation. The dataset has more than 100 rows. Now I want to make a
>> subset on the condition that the 'cross_section' column will pick up the
>> nearest cell from another vector (say 0, 50,100,150,200,.....,650).
>> How can I do this? I would really appreciate a solution.

If you what the "other vector" to define the “cell” boundaries, and using Jean’s example, it is a simple application of `findInterval`:

> inp <- c(144, 179, 214, 39, 284, 109, 74, 4, 249)
> mids <- c(0, 50, 100, 150, 200, 250, 300, 350)

> findInterval( inp, c(mids) )
[1] 3 4 5 1 6 3 2 1 5

On the other hand ...

To find the number of "closest point", this might help:


> findInterval(inp, c( mids[1]-.001, head(mids,-1)+diff(mids)/2, tail(mids,1)+.001 ) )
[1] 4 5 5 2 7 3 2 1 6



— 
David Winsemius
Alameda, CA, USA



More information about the R-help mailing list