Re: [R] Position in a vector of the last value > n - *SOLVED*

From: Thaden, John J <>
Date: Fri, 11 Jul 2008 11:23:25 -0500

I had written asking for a simple way to extract the Index of the last value in a vector greater than some cutoff, e.g., the index, 6, for a cutoff of 20 and this example vector:

v <- c(20, 134, 45, 20, 24, 500, 20, 20, 20)

Thank you, Alain Guillet, for this simple solution sent to me offlist:

max(which(v > 20)

Also, thank you Lisa Readdy for a lengthier solution.

Other offerings yielded the value instead of the index (the phrasing of my question apparently was misleading):

v[max(which(v > 20))] (Henrique Dallazuanna)

tail(v[v>20],1) (Jim Holtman)

Jim's use of tail() suggests a variant to Alain's solution

tail(which(v > 20), 1)

This is faster than the max() version with long vectors, but, to my surprise, slower (on my WinXP Lenovo T61 laptop) in a rough mockup of my column-wise apply() usage:

m <- matrix(rexp(3e6,rate=0.05), nrow=600) # 5,000 cols m[m<20] <- 20

func1 <- function(v,cut=20)  max(which(v>20))
func2 <- function(v,cut=20) tail(which(v>20),1)
system.time(apply(m, 2, func1))

# user system elapsed
# 0.40 0.02 0.42
system.time(apply(m, 2, func2))
# user system elapsed
# 0.70 0.05 0.75

Thank you again, Alain and others.

On Thu, Jul 10, 2008 at 9:41 AM, John Thaden wrote:
> This shouldn't be hard, but it's just not
> coming to me:
> Given a vector, e.g.,
> v <- c(20, 134, 45, 20, 24, 500, 20, 20, 20)
> how can I get the index of the last value in
> the vector that has a value greater than n, in
> the example, with n > 20? I'm looking for
> an efficient function I can use on very large
> matrices, as the FUN argument in the apply()
> command.

Confidentiality Notice: This e-mail message, including a...{{dropped:8}} mailing list PLEASE do read the posting guide and provide commented, minimal, self-contained, reproducible code. Received on Fri 11 Jul 2008 - 17:15:28 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Sat 12 Jul 2008 - 12:32:09 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.

list of date sections of archive