grouping elements from a table
显示 更早的评论
Hi everyone:
i have a table like this:
Week Open High Low Close
---- ---- ---- --- -----
10 1.2 1.4 1.1 1.2
10 1.5 1.7 1.5 1.6
10 1.4 2.1 1.3 2
10 2.2 2.4 2 2.1
11 2 2.1 2 2
11 2.2 2.5 1.1 1.3
12 1.7 1.9 1.6 1.6
12 1.8 1.9 0.6 1.4
12 0.9 1.4 0.8 1
is there a way to get the first element(open), maximum element(high), minimum element(low) and last element (close) for each week? so the result table would be
Week Open High Low Close
---- ---- ---- --- -----
10 1.2 2.4 1.1 2.1
11 2 2.5 1.1 1.3
12 1.7 1.9 0.6 1
thanks in advance
采纳的回答
更多回答(1 个)
Guillaume
2017-9-8
Step 1: define a function in its own m file that applies the appropriate filter to each column (unfortunately, you can't use anonymous functions for this):
function [firstopen, maxhigh, minlow, lastclose] = filtercols(open, high, low, close)
firstopen = open(1); %first element
maxhigh = max(high);
minlow = min(low);
lastclose = close(end); %last element
end
t = array2table([
10 1.2 1.4 1.1 1.2
10 1.5 1.7 1.5 1.6
10 1.4 2.1 1.3 2
10 2.2 2.4 2 2.1
11 2 2.1 2 2
11 2.2 2.5 1.1 1.3
12 1.7 1.9 1.6 1.6
12 1.8 1.9 0.6 1.4
12 0.9 1.4 0.8 1], ...
'VariableNames', {'Week', 'Open', 'High', 'Low', 'Close'});
result = rowfun(@filtercols, t, 'GroupingVariable', 'Week', 'NumOutputs', 4, 'OutputVariableNames', {'Open', 'High', 'Low', 'Close'})
The only potential issue is that the order in which the rows are grouped together by rowfun is not documented, so it may be that the first element and last element are not the correct ones. In my version of matlab (R2017a), it is correct.
类别
在 帮助中心 和 File Exchange 中查找有关 Tables 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!