How to count instances of values in a table?
17 次查看(过去 30 天)
显示 更早的评论
How can I make the following code more efficient? This current version takes incredibly long to run on my large table. The goal of the code is to assign the position each row appears in a table, where the table dates are sorted from newest to oldest.
For example, if
%input data sample
call_summary =
6×3 table
Symbol Date BDTE
______ ______ ______
AAPL 12/16/2022 7
AAPL 12/16/2022 14
AAPL 12/09/2022 7
AAPL 12/09/2022 14
AAPL 12/09/2022 21
AAPL 12/02/2022 7
AAPL 12/02/2022 21
%current code below
call_height = height(call_summary);
count_call = zeros(call_height,1);
parfor h = 1:call_height
count_call(h) = sum((call_summary.Symbol == call_summary{h,'Symbol'}).*(call_summary.BDTE == call_summary{h,'BDTE'}).*(call_summary.Date >= call_summary{h,'Date'}));
end
%output data sample
count_call =
6×1 table
Count
______
1 %First occurance of BDTE = 7 for AAPL, where dates sorted newest to oldest
1 %First occurance of BDTE = 14 for AAPL, where dates sorted newest to oldest
2 %Second occurance of BDTE = 7 for AAPL, where dates sorted newest to oldest
2 %Second occurance of BDTE = 14 for AAPL, where dates sorted newest to oldest
1 %First occurance of BDTE = 21 for AAPL, where dates sorted newest to oldest
3 %Third occurance of BDTE = 7 for AAPL, where dates sorted newest to oldest
2 %Second occurance of BDTE = 21 for AAPL, where dates sorted newest to oldest
0 个评论
回答(1 个)
Voss
2022-12-31
call_summary = table( ...
{'AAPL';'AAPL';'AAPL';'AAPL';'AAPL';'AAPL';'AAPL'}, ...
{'12/16/2022';'12/16/2022';'12/09/2022';'12/09/2022';'12/09/2022';'12/02/2022';'12/02/2022'}, ...
[7;14;7;14;21;7;21], ...
'VariableNames',{'Symbol','Date','BDTE'})
count_call = zeros(size(call_summary,1),1);
g = findgroups(call_summary(:,{'Symbol','BDTE'}));
for ii = 1:max(g)
count_call(g == ii) = 1:nnz(g == ii);
end
disp(count_call);
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Parallel for-Loops (parfor) 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!