Answered by:
How to find the Mode of an array of numbers
Question

Answers

Lemmy,
I might be the only one here who doesn't, but I have no idea what you're referring to "mode of an array". You might want to explain more about what you're looking for.
As for the code there  you are aware that arrays are zerobased, right?
 Marked as answer by Lemmy Winks Thursday, May 6, 2010 10:50 PM
All replies

Lemmy,
I might be the only one here who doesn't, but I have no idea what you're referring to "mode of an array". You might want to explain more about what you're looking for.
As for the code there  you are aware that arrays are zerobased, right?
 Marked as answer by Lemmy Winks Thursday, May 6, 2010 10:50 PM

Hi Lemmy Winks ,
Why have you marked the above reply as an answer when it is not really answering your question?
Why not click the green triangle instead and mark as helpful ?
Sorry Frank.
The MODE of any collection is the item that occurs most often
so from this set; {3,3,3,3,4,2,2,2,1}
3 is the MODE
4 is the MEDIAN or middle number.
I have not calculated the AVERAGE.
Regards,
John
Please see this thread for Vb.Net learning links.>> http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/549c8895678042f8878f2138214fdeb4 
Hi Lemmy Winks ,
Why have you marked the above reply as an answer when it is not really answering your question?
Why not click the green triangle instead and mark as helpful ?
Sorry Frank.
The MODE of any collection is the item that occurs most often
so from this set; {3,3,3,3,4,2,2,2,1}
3 is the MODE
4 is the MEDIAN or middle number.
I have not calculated the AVERAGE.
Regards,
John
Please see this thread for Vb.Net learning links.>> http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/549c8895678042f8878f2138214fdeb4
No, no offense John, I didn't think about statistics. But if in fact that's what he was asking  then how in creation did I help?I actually didn't notice that it had been answered until I saw your post!
I dunno. :o

@ Lemmy >
Just "for the record here" ... please don't feel embarrassed to ask whatever comes to mind (well, "what's the meaning of life" might take a while). Trust me  I consider myself to be the veritable village idiot here, so you're in good company. LOL :)

There may be a better way to do this, but I have the following:
Dim numbers() As Integer = {3, 3, 3, 3, 4, 2, 2, 2, 1} Dim counts = numbers.GroupBy(Function(n) n).Select(Function(g) New With {.Number = g.Key, .Quantity = g.Count}) For Each count In counts Debug.WriteLine(count.Number & ": " & count.Quantity) Next Dim mode = numbers.GroupBy(Function(n) n).Select(Function(g) New With {.Number = g.Key, .Quantity = g.Count}).OrderByDescending(Function(o) o.Quantity).FirstOrDefault Debug.WriteLine("Mode is: " & mode.Number)
The first set of code defines a list of the numbers and their counts.
The last two lines of code calculate and display the mode.
Hope this helps.
www.insteptech.com ; msmvps.com/blogs/deborahk
We are volunteers and ask only that if we are able to help you, that you mark our reply as your answer. THANKS! Proposed as answer by John Anthony Oliver Friday, May 7, 2010 3:31 AM

Hi ALL,
In support of the excellent post by DeborahK above, just to add.
OPTION INFER ON
is required.
Here is the output shown with MessageBoxes instead using one button on a FORM.
The following code was tried in both 2008 and 2010 versions of VB.Net. :D
Option Strict On Option Infer On Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim numbers() As Integer = {3, 3, 3, 3, 4, 2, 2, 2, 1} Dim counts = numbers.GroupBy(Function(n) n).Select(Function(g) New With {.Number = g.Key, .Quantity = g.Count}) Dim sb As New System.Text.StringBuilder For Each count In counts sb.Append("Count of " & count.Number & "'s = " & count.Quantity & System.Environment.NewLine) Next MessageBox.Show(sb.ToString) Dim mode = numbers.GroupBy(Function(n) n).Select(Function(g) New With {.Number = g.Key, .Quantity = g.Count}).OrderByDescending(Function(o) o.Quantity).FirstOrDefault MessageBox.Show("Mode is: " & mode.Number) End Sub End Class
Regards,
John
P.S. To DeborahK , do you know of any function that would get the middle or MEDIAN value if an array has an odd number of items at all please? Sorry, to ask but I just love seeing these Functions from you.
;)
I tried it with DOUBLE values too. :D
>>
Option Strict On Option Infer On Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim numbers() As Double = {3.2, 3.2, 3.2, 3.2, 4.5, 2.7, 2.7, 2.7, 1.6} Dim counts = numbers.GroupBy(Function(n) n).Select(Function(g) New With {.Number = g.Key, .Quantity = g.Count}) Dim sb As New System.Text.StringBuilder For Each count In counts sb.Append("Count of " & count.Number & "'s = " & count.Quantity & System.Environment.NewLine) Next MessageBox.Show(sb.ToString) Dim mode = numbers.GroupBy(Function(n) n).Select(Function(g) New With {.Number = g.Key, .Quantity = g.Count}).OrderByDescending(Function(o) o.Quantity).FirstOrDefault MessageBox.Show("Mode is: " & mode.Number) End Sub End Class
Please see this thread for Vb.Net learning links.>> http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/549c8895678042f8878f2138214fdeb4 
John 
I am working on the median now ... but I think your original most about this was not right. The median of this {3,3,3,3,4,2,2,2,1} is not 4, right? It would be 3?
www.insteptech.com ; msmvps.com/blogs/deborahk
We are volunteers and ask only that if we are able to help you, that you mark our reply as your answer. THANKS! 
John 
I am working on the median now ... but I think your original most about this was not right. The median of this {3,3,3,3,4,2,2,2,1} is not 4, right? It would be 3?
www.insteptech.com ; msmvps.com/blogs/deborahk
We are volunteers and ask only that if we are able to help you, that you mark our reply as your answer. THANKS!
Hi again DeborahK ,You are of course right after reading.>>
http://math.about.com/library/weekly/aa020502a.htm
it is the middle number when the numbers are sorted in increasing value when the number of items is odd.
I had forgot to "arrange" them in order first, I'm bad, doh!!
Otherwise the MEDIAN is the average of the two numbers in the middle of a sequence if the numbers of items is even when the numbers are sorted in increasing order first.
I had forgotton all that you know, something to do with middle age I think!! LOL!!
Regards,
John
Please see this thread for Vb.Net learning links.>> http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/549c8895678042f8878f2138214fdeb4 
I posted the mean, median, and mode here:
http://msmvps.com/blogs/deborahk/archive/2010/05/07/linqmeanmedianandmode.aspx
Hope this helps.
www.insteptech.com ; msmvps.com/blogs/deborahk
We are volunteers and ask only that if we are able to help you, that you mark our reply as your answer. THANKS! 
I posted the mean, median, and mode here:
http://msmvps.com/blogs/deborahk/archive/2010/05/07/linqmeanmedianandmode.aspx
Hope this helps.
www.insteptech.com ; msmvps.com/blogs/deborahk
We are volunteers and ask only that if we are able to help you, that you mark our reply as your answer. THANKS!
Hi again DeborahK ,Many thanks once again. :D
I reckon you enjoy creating these LINQ and LAMBDA expressions? ;)
I reckon you should create a DeborahK_methods_library.dll
Maybe make it a download on your blog site? I'd even be willing to pay for it via PayPal.
Have you considered or have you wrote any addins for Visual Studio?
Regards,
John
Please see this thread for Vb.Net learning links.>> http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/549c8895678042f8878f2138214fdeb4 

Don't forget that a set of numbers may have more than one value for the mode.
http://mathworld.wolfram.com/Mode.html
So, (and I suspect there's a neater way of writing this):
Dim numbers() As Integer = {4, 4, 4, 4, 3, 2, 2, 2, 1, 1, 1, 1}
Dim modes = From a In (From n In numbers Group n By n Into g = Count() Select g, n) Order By a.g Where a.g = (From n In numbers Group n By n Into g = Count() Select g).Max Select a.n
' gives 4 and 1


Very kind of you, Frank and John!
Thanks!
www.insteptech.com ; msmvps.com/blogs/deborahk
We are volunteers and ask only that if we are able to help you, that you mark our reply as your answer. THANKS! 
Private Sub b_Capture_Click(ByVal sender As System.Object, ByVal e As System.Event.........)
Dim tamano As Integer
tamano=Me.DataGridView1.Rows.Count2
Dim suma as Double
'forming the array from the DataGridView Input Control
Dim size(tamano) As String
For i As Integer =0 To tamano
size(i) = Me.DataGridView1.Item(0,1).value
Next
'Getting the Mean
Dim x As Integer=0
suma=0
For x=0 To tamano
suma=suma+size(x)
Next
'Display the mean to User
Me.tb_Promedio.Text=(suma/x).ToString
'Sort the array in ascending order
Dim temp(tamano) As String
For u=0 To size.Length
For y=u+1 To size.Length1
if size(u)>size(y) Then
temp(u) = size(y)
size(u) = size(y)
size(y) = temp(u)
End If
Next
Next
'Getting the Median
Dim median As Integer
Dim data_size As Integer  tamano+1
If data_size Mod 2 =1 Then 'if 1 then odd else even
median= size((data_size1)/2)
Else
median= size(data_size/2)
End If
'Displaying the Median to User
Me.tb_Median.Text= "The Median is: " + median.ToString
'Getting the Mode
Dim mode As Integer =0
Dim count As Integer = 0
Dim countMax As Integer =0
For u=0 To size.Length2
if size(u) = size(u+1) Then
count= count + 1
Else
if count > countMax Then
countMax = count
mode = size(u)
count = 0
End If
End If
Next
'Display the Mode
Me.tb_mode.Text = "The Mode is: " + mode.ToString
End Sub

Sosa F,
I have to point out that your calculation of the median is wrong when there is an even number of elements, and your code to find the mode fails when there is more than one mode.
For example, the median of {1,2,3,4} is 2.5, and the mode of {1,1,2,2} is {1,2}.
Also, this thread is more than two years old ;)

Andrew Edited by Andrew Morton Friday, October 12, 2012 7:08 PM

Hi Andrew, Thanks for the corrections, I am new in programming and just wanted to help somebody who will be dealing with this topic in the future. The median for an even number of elements could be corrected with the folling modifications: Dim median As Decimal = 0 Dim data_size As Integer = tamano + 1 If data_size Mod 2 = 1 Then median = size((data_size1)/2) Else median = (Cint(size(data_size/2)) + Cint(size(data_size/2 1)))/2 En If 'Displaying the Median to user Me.tb_Median.Text = "The Median is: " + median.ToString Thanks a lot my friend and have an excellent weekend Peace & Good