Counting in one column that is conditional on another column

2 Ansichten (letzte 30 Tage)
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

Akzeptierte Antwort

per isakson
per isakson am 2 Apr. 2021
Bearbeitet: per isakson am 2 Apr. 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 Kommentare
Mirthand
Mirthand am 5 Apr. 2021
You are right, I need to think carefully about how I want to change column 2 so that it works.
Mirthand
Mirthand am 5 Apr. 2021
Thanks for your help again!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Steven Lord
Steven Lord am 2 Apr. 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 Kommentar
Mirthand
Mirthand am 2 Apr. 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 ]};

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Software Development Tools finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by