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

Thaden, John J ThadenJohnJ at uams.edu
Fri Jul 11 18:23:25 CEST 2008


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.
John

----------------

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}}



More information about the R-help mailing list