Finding a pattern in a table and the coordinates of the "first hit"

30 Ansichten (letzte 30 Tage)
Andrew Sol
Andrew Sol am 14 Nov. 2024 um 10:24
Beantwortet: Image Analyst am 14 Nov. 2024 um 15:16
I have a table like this:
'NaN' NaN NaN
'NaN' NaN NaN
'NaN' NaN NaN
'07:02:58.830' 1 NaN
'07:02:58.830' 1 831
'07:02:58.830' 1 NaN
'07:02:58.830' 1 NaN
'07:02:58.830' 1 831
'NaN' NaN NaN
'07:02:59.430' 2 NaN
'07:02:59.430' 2 831
'07:02:59.430' 2 819
'07:02:59.430' 2 819
The first column contains the time in the format X:Y:Z.
What I need: I need to find this pattern in the first column and calculate the coordinates of the first hit.
What the result should look like: in the case of the table in question, the result should be the coordinate of the cell in which this pattern occurs for the first time. In this case, it is [row,col] = [4,1];

Antworten (2)

Sameer
Sameer am 14 Nov. 2024 um 10:53
Bearbeitet: Sameer am 14 Nov. 2024 um 10:56
To find the first occurrence of a specific pattern in the first column of your table you can create a duration object from a time string ('07:02:58.830') and search for its first occurrence in table's first column using find
Here's how you can do it:
load('Table.mat');
pattern = duration('07:02:58.830', 'Format', 'hh:mm:ss.SSS');
firstColumn = Table{:, 1};
% Find the index of the first occurrence of the pattern
index = find(firstColumn == pattern, 1);
if ~isempty(index)
fprintf('The first occurrence of the pattern is at [row, col] = [%d, %d];\n', index, 1);
else
fprintf('Pattern not found.\n');
end
The first occurrence of the pattern is at [row, col] = [4, 1];
Please refer to below MathWorks documentation links:
Hope this helps!
  2 Kommentare
Andrew Sol
Andrew Sol am 14 Nov. 2024 um 11:04
Bearbeitet: Andrew Sol am 14 Nov. 2024 um 11:05
Thank you for your answer! And if the time is unknown in advance and you I to find a time pattern (the time can be any, the main thing is that it is in the format 'hh:mm:ss.SSS'), how will the code change?
In other words: how to find the first occurrence of an arbitrary time of a given format in a table?
Sameer
Sameer am 14 Nov. 2024 um 11:57
load('Table.mat');
firstColumnStr = cellstr(Table{:, 1});
timePattern = '\d{2}:\d{2}:\d{2}\.\d{3}';
index = find(~cellfun('isempty', regexp(firstColumnStr, timePattern)), 1);
if ~isempty(index)
fprintf('The first occurrence of the time pattern is at [row, col] = [%d, %d];\n', index, 1);
else
fprintf('Time pattern not found.\n');
end
The first occurrence of the time pattern is at [row, col] = [4, 1];

Melden Sie sich an, um zu kommentieren.


Image Analyst
Image Analyst am 14 Nov. 2024 um 15:16
Another way is to use ismember
% Load data from .mat file.
S = load('Andrew Table.mat');
t = S.Table;
% Extract first column into it's own variable (optional - just for convenience).
times = t{:, 1}; % This variable is of type "duration".
% Define the pattern we are trying to find
pattern = duration([07,02,58.830])
pattern = duration
07:02:58
% Find the first row where it occurs
[~, matchingRow] = ismember(pattern, times)
matchingRow = 4

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Produkte


Version

R2024a

Community Treasure Hunt

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

Start Hunting!

Translated by