[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