Finding a pattern in a table and the coordinates of the "first hit"
30 次查看(过去 30 天)
显示 更早的评论
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];
0 个评论
回答(2 个)
Sameer
2024-11-14,10:53
编辑:Sameer
2024-11-14,10:56
Hi @Andrew Sol
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
Please refer to below MathWorks documentation links:
Hope this helps!
2 个评论
Sameer
2024-11-14,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
Image Analyst
2024-11-14,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])
% Find the first row where it occurs
[~, matchingRow] = ismember(pattern, times)
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!