Separate a matrix into bins based on first column values

6 ビュー (過去 30 日間)
Austin Bollinger
Austin Bollinger 2022 年 6 月 17 日
コメント済み: Voss 2022 年 6 月 17 日
I want to seperate a matrix that has two columns of values into bins based on the value of the first column. I would like to be seperate in 1 step incraments from -15 to 15 for the first column and grab the second column value with it so I can analyze the second column values during different sections of column one. Is there a way to do this. I attached the data file that I am trying to seperate into bins. Thank you for your help!

採用された回答

Voss
Voss 2022 年 6 月 17 日
編集済み: Voss 2022 年 6 月 17 日
load('DataRoll.mat')
plot(DataRoll(:,1),DataRoll(:,2)) % plot all data for reference
grid on
set(gca(), ...
'Box','on', ...
'Layer','top', ...
'XMinorGrid','on', ...
'XLim',[-15 16]);
bin_idx = discretize(DataRoll(:,1),-15:16); % using -15:15 misses the data above 15
binned_data = splitapply(@(x){x},DataRoll,findgroups(bin_idx))
binned_data = 31×1 cell array
{108×2 double} {118×2 double} {190×2 double} {252×2 double} {260×2 double} {228×2 double} {378×2 double} {429×2 double} {385×2 double} {250×2 double} {301×2 double} {334×2 double} {455×2 double} {546×2 double} {496×2 double} {552×2 double}
figure
hold on
cellfun(@(x)plot(x(:,1),x(:,2),'.'),binned_data);
set(gca(), ...
'Box','on', ...
'Layer','top', ...
'XGrid','on', ...
'XMinorGrid','on', ...
'MinorGridLineStyle','-', ...
'MinorGridColor','k', ...
'MinorGridAlpha',1, ...
'GridAlpha',1, ...
'XLim',[-15 16]);
  6 件のコメント
Voss
Voss 2022 年 6 月 17 日
You're welcome!

サインインしてコメントする。

その他の回答 (1 件)

dpb
dpb 2022 年 6 月 17 日
編集済み: dpb 2022 年 6 月 17 日
load DataRoll
bar(N)
xlim([0.25 31.75])
[min(DataRoll(:,1)) max(DataRoll(:,1))]
[N,e,g]=histcounts(DataRoll(:,1),-15:16);
t=[array2table(DataRoll),table(g)];
groupsummary(t,"g","std","DataRoll2")
You can do whatever you want with the grouping variable calculation -- also see splitapply rowfun and/or varfun as well as groupfilter
NB: the range of your data are from
[min(DataRoll(:,1)) max(DataRoll(:,1))]
ans =
-14.9047 15.5137
>>
so the edges vector needs must cover 16 as upper end to bin all elements in the first column.
  1 件のコメント
Austin Bollinger
Austin Bollinger 2022 年 6 月 17 日
Thank you!

サインインしてコメントする。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by