1 view (last 30 days)
Martin on 17 Feb 2018
Answered: Peter Perkins on 17 Feb 2018
Imagine 2 two datasets where column 1 is a timestamp, column 2 is data (can be more columns).
A = [ 1 2 3 4 5 6 7 ; 435 124 525 342 532 533 213 ]'
Today I get this (Rows each day can vary):
B = [ 5 6 7 8 9 10 ; 532 533 213 988 999 777 ]'
So 5:7 (timestamp) overlaps. Any idea how I can end up connecting those time stamps so I can get this:
C= [ 1 2 3 4 5 6 7 8 9 10 ; 435 124 525 342 532 533 213 988 999 777]'
I want to return all the data in A and B without repeating the data common to both A and B (not just simple concatinating)

Guillaume on 17 Feb 2018
Edited: Guillaume on 17 Feb 2018
C = union(A, B, 'rows');
Note that your example is neither a timeseries nor a table. Be careful with the terms you use to avoid confusion.

Martin on 17 Feb 2018
Thanks, and you are right about the words. And actually I guess I was unclear again as well. With your help I end up with
C = [5 6 7 ; 532 533 213 ]'
C= [ 1 2 3 4 5 6 7 8 9 10 ; 435 124 525 342 532 533 213 988 999 777]'
Guillaume on 17 Feb 2018
No, you were perfectly clear. My brain wasn't engaged properly. I meant to use union instead of intersect.
Fixed now.
Martin on 17 Feb 2018
Thanks for union, works

Peter Perkins on 17 Feb 2018
If you are using R2016b or later, you may find that using timetables is convenient. For example, union works the same way as what Guillaume showed ...
>> A = timetable(seconds([1 2 3 4 5 6 7]'), [435 124 525 342 532 533 213]')
A =
7×1 timetable
Time Var1
_____ ____
1 sec 435
2 sec 124
3 sec 525
4 sec 342
5 sec 532
6 sec 533
7 sec 213
>> B = timetable(seconds([5 6 7 8 9 10]'),[532 533 213 988 999 777]')
B =
6×1 timetable
Time Var1
______ ____
5 sec 532
6 sec 533
7 sec 213
8 sec 988
9 sec 999
10 sec 777
>> union(A,B)
ans =
10×1 timetable
Time Var1
______ ____
1 sec 435
2 sec 124
3 sec 525
4 sec 342
5 sec 532
6 sec 533
7 sec 213
8 sec 988
9 sec 999
10 sec 777
but timetables also bring along a lot of other functionality around "combining data".