which.max is even faster: dims <- c(1000,1000) tt <- array(rnorm(prod(dims)),dims) # which system.time( replicate(100, which(tt==max(tt), arr.ind=TRUE)) ) # which.max (& arrayInd) system.time( replicate(100, arrayInd(which.max(tt), dims)) )
Best, Denes > But it's simpler and probably faster to use R's built-in capabilities. > ?which ## note the arr.ind argument!) > > As an example: > > test <- matrix(rnorm(24), nr = 4) > which(test==max(test), arr.ind=TRUE) > row col > [1,] 2 6 > > So this gives the row and column indices of the max, from which row and > column names can easily be obtained from the dimnames attribute of the > matrix. > > Note: This assumes that the object in question is a matrix, NOT a data > frame, for which it would be slightly more complicated. > > -- Bert > > > On Tue, Oct 11, 2011 at 3:06 PM, Carlos Ortega > <c...@qualityexcellence.es>wrote: > >> Hi, >> >> With this code you can find row and col names for the largest value >> applied >> to your example: >> >> r.m.tmp<-apply(dat,1,max) >> r.max<-names(r.m.tmp)[r.m.tmp==max(r.m.tmp)] >> >> c.m.tmp<-apply(dat,2,max) >> c.max<-names(c.m.tmp)[c.m.tmp==max(c.m.tmp)] >> >> It's inmediate how to get the same for the smallest and build a function >> to >> calculate everything and return a list. >> >> >> Regards, >> Carlos Ortega >> www.qualityexcellence.es >> >> 2011/10/11 Ben qant <ccqu...@gmail.com> >> >> > Hello, >> > >> > I'm looking to get the values, row names and column names of the >> largest >> > and >> > smallest values in a matrix. >> > >> > Example (except is does not include the names): >> > >> > > x <- swiss$Education[1:25] >> > > dat = matrix(x,5,5) >> > > colnames(dat) = c('a','b','c','d','c') >> > > rownames(dat) = c('z','y','x','w','v') >> > > dat >> > a b c d c >> > z 12 7 6 2 10 >> > y 9 7 12 8 3 >> > x 5 8 7 28 12 >> > w 7 7 12 20 6 >> > v 15 13 5 9 1 >> > >> > > #top 10 >> > > sort(dat,partial=n-9:n)[(n-9):n] >> > [1] 9 10 12 12 12 12 13 15 20 28 >> > > # bottom 10 >> > > sort(dat,partial=1:10)[1:10] >> > [1] 1 2 3 5 5 6 6 7 7 7 >> > >> > ...except I need the rownames and colnames to go along for the ride >> with >> > the >> > values...because of this, I am guessing the return value will need to >> be >> a >> > list since all of the values have different row and col names (which >> is >> > fine). >> > >> > Regards, >> > >> > Ben >> > >> > [[alternative HTML version deleted]] >> > >> > ______________________________________________ >> > 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. >> > >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> 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. >> > > [[alternative HTML version deleted]] > > ______________________________________________ > 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. > ______________________________________________ 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.