Counting the number of elements of a vector found between a range in another vector

조회 수: 6 (최근 30일)
I have a column which contains a range of values in a column 'Range' and another vector containing specific values in a column 'entryTime'. How to output the number of elements found in column 'entryTime' within the column 'Range'.
Data is attached

채택된 답변

Guillaume
Guillaume 2018년 12월 7일
Frankly, the way you've stored your data is rubbish and making your work much harder.
Firstly, Your ranges shouldn't be stored as char arrays. It should be a 2 x numranges matrix or table.
Secondly, since the rows of Range have absolutely nothing to do with the rows of entryTime, they shouldn't be stored together in the same table. That would avoid pointless storing nans in entryTime if there are more ranges or god knows what as a filler in Ranges if there are more entryTimes.
So let's fix this:
ranges = regexp(data.Range, '([^-]+)-(.+)', 'tokens', 'once'); %plenty of other ways to split the data
ranges = array2table(str2double(vertcat(ranges{:})), 'VariableNames', {'lowerbound', 'upperbound'})
entryTimes = data(:, 'entryTime');
entryTimes(isnan(entryTimes.entryTime), :) = []
Then your problem is trivial:
rangecount = rowfun(@(l, u) sum(entryTimes.entryTime >= l & entryTimes.entryTime <= u), ranges, 'OutputVariableNames', {'count'})

추가 답변 (1개)

TADA
TADA 2018년 12월 6일
편집: TADA 2018년 12월 6일
If you keep your range data as two columns instead of strings you can easily do it
et = data.entryTime(~isnan(data.entryTime));
% split ranges by '-' character
rng = cellfun(@(str) strsplit(str, '-'), data.Range, 'UniformOutput', false);
% Unravel cell array and parse numbers
ranges = str2double(vertcat(rng{:}));
% find which entry times are within any of the ranges
entryTimesInRangeMask = arrayfun(@(t) any(t >= ranges(:,1) & t <= ranges(:,2)), et);
% output number of elements within any of the ranges
disp(['Number of entry times within range: ' num2str(sum(entryTimesInRangeMask))]);
  댓글 수: 1
Hari krishnan
Hari krishnan 2018년 12월 7일
편집: Hari krishnan 2018년 12월 7일
@TADA thank you very much. But this will give me the toral numbers of elements which falls between all the ranges. What i want to do is to calculate the number of elements in each independent range.
for eg: range = [0:5; 5.1:10; 10.1:15]
entries = [1, 2, 3, 4, 5, 11, 12]
Expected output: Number of entries in range "0:5" = 5
Number of entries in range "5.1:10" = 0
Number of entries in range "10.1:15" = 2

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Dates and Time에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by