Counting in one column that is conditional on another column

2 visualizaciones (últimos 30 días)
For each cell (or "trial") in the variable trials (attached):
I'd like to count the number of 1's in column 4 that is dependent on certain conditions in column 2 for each trial.
Conditions saved in their own variable:
Count 1's in column 4 if column 2 is between 0 and 4 (less than 4, not equal to)
Count 1's in column 4 if column 2 is between 4 and 5 (less than 5, not equal to)
Count 1's in column 4 if column 2 is between 5 and 6 (less than 6, not equal to)
Count 1's in column 4 if column 2 is between 6 and 7 (less than 7, not equal to)
Count 1's in column 4 if column 2 is between 7 and end

Respuesta aceptada

per isakson
per isakson el 2 de Abr. de 2021
Editada: per isakson el 2 de Abr. de 2021
Does this do what you look for?
%%
limits = { [0;4], [4;5], [5;6], [6;7], [7;inf] };
%% some simple test data
trials = {[ 0, 2, 0, 1, 0, 0, 0
0, 2, 0, 0, 0, 0, 0
0, 5, 0, 1, 0, 0, 0
0, 5, 0, 0, 0, 0, 0
0, 5, 0, 1, 0, 0, 0
0, 5, 0, 0, 0, 0, 0
0, 9, 0, 1, 0, 0, 0 ]};
%%
fh = @(trial,lim) sum( (trial(:,4)==1) & (lim(1)<=trial(:,2) & trial(:,2)<lim(2)), 1 );
%%
counts = zeros( numel(trials), numel(limits) );
for rr = 1 : numel(trials)
for cc = 1 : numel(limits)
counts(rr,cc) = fh( trials{rr}, limits{cc} );
end
end
Inspect
>> counts
counts =
1 0 2 0 1
Yes, sum() can operate on logicals
>> sum([true,true,false])
ans =
2
  10 comentarios
Mirthand
Mirthand el 5 de Abr. de 2021
You are right, I need to think carefully about how I want to change column 2 so that it works.
Mirthand
Mirthand el 5 de Abr. de 2021
Thanks for your help again!

Iniciar sesión para comentar.

Más respuestas (1)

Steven Lord
Steven Lord el 2 de Abr. de 2021
Use discretize or findgroups to identify groups based on the values in column 2, then use groupsummary or splitapply to perform group processing on column 4 based on the groups you identified in the first step.
  1 comentario
Mirthand
Mirthand el 2 de Abr. de 2021
Would discretize work if there are zeros?
for example, I still want to group the third row with the group that is 2.
The 7th row, containing zero would also be grouped with 5.
trials = {[ 0, 2, 0, 1, 0, 0, 0
0, 2, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0
0, 5, 0, 1, 0, 0, 0
0, 5, 0, 0, 0, 0, 0
0, 5, 0, 1, 0, 0, 0
0, 0, 0, 0, 0, 0, 0
0, 5, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0
0, 6, 0, 1, 0, 0, 0 ]};

Iniciar sesión para comentar.

Categorías

Más información sobre Logical en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by