MATLAB: Find values per day using a bin width.

bin width

Hi. I have an 738×2 catalog that contains days (0,1,2..etc) and earthquake magnitudes. I need to to find the magnitudes per day using a bin width i.e 2.1- 3, 3-4, 4-5, 5-6 and to store them in this format: 2.1-3 3-4 4-5
0 …. …. ….
Any help? Bellow, I attach my catalog. 1 …. …. ….

Best Answer

A little creativity with groupsummary will get you the data you want. It allows you to group your data by day and by user-defined bin edges, each applied to just the corresponding table variables.
eq = readtable("days_magnitudes.txt");
eqT = groupsummary(eq,{'Var1','Var2'},{'none',[1 3 4 5 6]},'IncludeEmptyGroups',true,'IncludeMissingGroups',true)
eqT = 468x3 table
Var1 disc_Var2 GroupCount ____ _________ __________ 0 [1, 3) 56 0 [3, 4) 32 0 [4, 5) 2 0 [5, 6] 1 1 [1, 3) 61 1 [3, 4) 6 1 [4, 5) 0 1 [5, 6] 0 2 [1, 3) 37 2 [3, 4) 15 2 [4, 5) 1 2 [5, 6] 1 3 [1, 3) 21 3 [3, 4) 5 3 [4, 5) 0 3 [5, 6] 0
If you want the output to be a matrix with a row for each data, and a column for each bin, you can do that in the following way.
out = [unique(eq.Var1), reshape(eqT.GroupCount,4,[])']
out = 117×5
0 56 32 2 1 1 61 6 0 0 2 37 15 1 1 3 21 5 0 0 4 15 1 0 0 5 12 0 0 0 6 11 2 0 0 7 12 4 0 0 8 12 1 0 0 9 6 0 0 0