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