R: how to find the mode of a vector -


this question has answer here:

below data.frame , know mode each of memory categories (1 through 8)

> dput(d) structure(list(memory1 = c(5.5, 7, 1.5, 6, 4.5, 4.5, 5, 4, 1,  5.5, 2.5, 4.5, 2.5, 5.5, 4, 1, 4, 5, 2.5, 5.5), memory2 = c(5.5,  3, 1.5, 6, 4.5, 4.5, 5, 4, 5, 5.5, 6.5, 4.5, 2.5, 5.5, 4, 7,  8, 5, 6.5, 5.5), memory3 = c(5.5, 3, 4.5, 2, 4.5, 4.5, 5, 4,  5, 1.5, 6.5, 4.5, 6.5, 5.5, 4, 7, 4, 5, 6.5, 5.5), memory4 = c(1.5,  3, 4.5, 2, 1, 4.5, 5, 4, 5, 5.5, 2.5, 4.5, 2.5, 1.5, 4, 2, 4,  5, 2.5, 1.5), memory5 = c(5.5, 3, 4.5, 6, 4.5, 4.5, 5, 1, 5,  5.5, 6.5, 4.5, 6.5, 5.5, 4, 4, 4, 5, 2.5, 1.5), memory6 = c(5.5,  7, 7.5, 6, 8, 4.5, 5, 7.5, 5, 5.5, 6.5, 4.5, 6.5, 5.5, 4, 4,  4, 5, 2.5, 5.5), memory7 = c(1.5, 3, 4.5, 2, 4.5, 4.5, 1, 4,  5, 1.5, 2.5, 4.5, 6.5, 1.5, 4, 7, 4, 1, 6.5, 5.5), memory8 = c(5.5,  7, 7.5, 6, 4.5, 4.5, 5, 7.5, 5, 5.5, 2.5, 4.5, 2.5, 5.5, 8, 4,  4, 5, 6.5, 5.5)), .names = c("memory1", "memory2", "memory3",  "memory4", "memory5", "memory6", "memory7", "memory8"), row.names = c(492l,  509l, 510l, 518l, 519l, 522l, 527l, 533l, 535l, 542l, 543l, 557l,  558l, 560l, 567l, 569l, 578l, 581l, 582l, 584l), class = "data.frame") 

please ignore first unnamed column not relevant here.

> d     memory1 memory2 memory3 memory4 memory5 memory6 memory7 memory8 492     5.5     5.5     5.5     1.5     5.5     5.5     1.5     5.5 509     7.0     3.0     3.0     3.0     3.0     7.0     3.0     7.0 510     1.5     1.5     4.5     4.5     4.5     7.5     4.5     7.5 518     6.0     6.0     2.0     2.0     6.0     6.0     2.0     6.0 519     4.5     4.5     4.5     1.0     4.5     8.0     4.5     4.5 522     4.5     4.5     4.5     4.5     4.5     4.5     4.5     4.5 527     5.0     5.0     5.0     5.0     5.0     5.0     1.0     5.0 533     4.0     4.0     4.0     4.0     1.0     7.5     4.0     7.5 535     1.0     5.0     5.0     5.0     5.0     5.0     5.0     5.0 542     5.5     5.5     1.5     5.5     5.5     5.5     1.5     5.5 543     2.5     6.5     6.5     2.5     6.5     6.5     2.5     2.5 557     4.5     4.5     4.5     4.5     4.5     4.5     4.5     4.5 558     2.5     2.5     6.5     2.5     6.5     6.5     6.5     2.5 560     5.5     5.5     5.5     1.5     5.5     5.5     1.5     5.5 567     4.0     4.0     4.0     4.0     4.0     4.0     4.0     8.0 569     1.0     7.0     7.0     2.0     4.0     4.0     7.0     4.0 578     4.0     8.0     4.0     4.0     4.0     4.0     4.0     4.0 581     5.0     5.0     5.0     5.0     5.0     5.0     1.0     5.0 582     2.5     6.5     6.5     2.5     2.5     2.5     6.5     6.5 584     5.5     5.5     5.5     1.5     1.5     5.5     5.5     5.5 

if tabulate values memory1, following:

> table(d$memory1)    1 1.5 2.5   4 4.5   5 5.5   6   7    2   1   3   3   3   2   4   1   1  

so can see 5.5 mode here, , tried as.numeric(names(table(d$memory1))[which.max(table(d$memory1))]) did return 5.5. pretty clunky , how can iterate on 8 columns of data.frame? want resulting vector containing 8 modes (one corresponding each column). what's elegant way this?

this post provides elegant function determine mode need apply data frame.

mode <- function(x) {   ux <- unique(x)   ux[which.max(tabulate(match(x, ux)))] }  apply(d, 2, mode) 

yields:

memory1 memory2 memory3 memory4 memory5 memory6 memory7 memory8      5.5     5.5     4.5     1.5     4.5     5.5     4.5     5.5  

Comments

Popular posts from this blog

user interface - how to replace an ongoing process of image capture from another process call over the same ImageLabel in python's GUI TKinter -

javascript - Using jquery append to add option values into a select element not working -

javascript - Restarting Supervisor and effect on FlaskSocketIO -