MATLAB Answers

Info

This question is closed. Reopen it to edit or answer.

Generate table with an arbitrary number of events

1 view (last 30 days)
Matlab
Matlab on 18 Sep 2019
Closed: Matlab on 5 Nov 2019
Please find the attachement for the data .
I want an arbitrary number of events all occuring at the same time on different rows, matched up against each other arbitrarily.
For example :
t1 = timetable(hours([1;2;3;4;5]), {'A';'B';'C';'D';'E'});
t2 = timetable(hours([1;2;3]), [pi; sqrt(2);log2(eps)]);
t3 = timetable(hours([1;2;3;4]), [pi; sqrt(2);log2(eps);eps('single')]);
t4 = timetable(hours([1;2;3;4;5]), [pi; sqrt(2);log2(eps);eps('single');log2(eps('single'))]);
I want to generate a table that look's in below style.
Time Var1_t1 Var1_t2 Var1_t3 Var1_t4
____ _______ _______ __________ __________
1 hr 'A' 3.1416 3.1416 3.1416
2 hr 'B' 1.4142 1.4142 1.4142
3 hr 'C' -52 -52 -52
4 hr 'D' "" 1.1921e-07 1.1921e-07
5 hr 'E' "" "" -23
Please suggest an alogorithm which can do above requirement with the attached *.mat file.
Thanks!

  2 Comments

Guillaume
Guillaume on 18 Sep 2019
Note that for this example data with numeric values for t2, t3, and t4, the filler should probably be NaN instead of "".
For your real timetables, where all columns are strings, "" would be appropriate.
Matlab
Matlab on 20 Oct 2019
The thoery & implementation is explained below
% Input
t1 = timetable(hours([1;2;3;4;5]), {'A';'B';'C';'D';'E'});
t2 = timetable(hours([1;2;3]), [pi; sqrt(2);log2(eps)]);
t3 = timetable(hours([1;2;3;4]), [pi; sqrt(2);log2(eps);eps('single')]);
t4 = timetable(hours([1;2;3;4;5]), [pi; sqrt(2);log2(eps);eps('single');log2(eps('single'))]);
% implementation
s_Array = [{t1},{t2},{t3},{t4}];
% do a outerjoin
% The ordered pairs (a, b) is such that a ∈ A and b ∈ B. So, A × B = {(a,b): a ∈ A, b ∈ B}. For example,
% Consider two non-empty sets A = {a1, a2, a3} and B = {b1, b2, b3}
% Cartesian product A×B = {(a1,b1), (a1,b2), (a1,b3), ( a2,b1), (a2,b2),(a2,b3), (a3,b1), (a3,b2), (a3,b3)}.
% A = Φ or B = Φ, then, A × B = Φ i.e., A × B will also be a null set
for i = 1:numel(s_Array)
if (i==1)
jointimetable = s_Array{1} ;
else
jointimetable = outerjoin(jointimetable,s_Array{i},'Merge',true) ;
end
end
disp(jointimetable);
Generated output match required out.
Time Var1_jointimetable Var1_right Var1_jointimetable_1 Var1_right_1
____ __________________ __________ ____________________ ____________
1 hr 'A' 3.1416 3.1416 3.1416
2 hr 'B' 1.4142 1.4142 1.4142
3 hr 'C' -52 -52 -52
4 hr 'D' NaN 1.1921e-07 1.1921e-07
5 hr 'E' NaN NaN -23

Answers (0)

Community Treasure Hunt

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

Start Hunting!