Data manipulation: "Stitching" together a time series

6 visualizzazioni (ultimi 30 giorni)
Tobias
Tobias il 7 Gen 2015
Modificato: Guillaume il 22 Gen 2015
Hello. I have a slight data manipulation problem:
I have a few time series, where the timing (many more to come) looks like this:
14.243 30.212 . . . 980.563 (new round) 7.823 18.959 . . . 786.34 (new round) ... You get the picture, right?
There is an arbitrary number of intervals between the different "time-spikes", which makes it look like this:
Now, how do I "fuse" or "stitch" together the "peak" to the first obs. of the next round, so that i get a meaningful timeline?
Thanks in advance! T

Risposte (2)

Star Strider
Star Strider il 7 Gen 2015
I’m not certain how your data are organised, so this is just a guess:
t = [1:10; 11:20; 21:30]; % Original Time Matrix
tr = reshape(t', 1, []); % Sequential Time Vector
y = [1:10; 1:10; 1:10]; % Original Data Matrix
ye = cumsum([0; y(2:end,end)]); % Find End Values & Sum
ys = bsxfun(@plus, y, ye); % Add End Values To ‘y’
yr = reshape(ys', 1, []); % Create Sequential Data Vector
figure(1)
subplot(2,1,1)
plot(t', y')
grid on
subplot(2,1,2)
plot(tr, yr)
grid on
It has the virtue of working, and will at least provide you with one possible solution.
  2 Commenti
Tobias
Tobias il 22 Gen 2015
Hello. Thanks for the suggestion -- and sorry I didn't elaborate on data structure.
I have several variables in single arrays of varying length. I.e. some of them are 1x389 double, some are 1x66 double.
My problem is really that, as shown in the above figure, there is no constant distance between different peaks. I.e. in figure above, the first peak comes at approximately 40, while the next one might be at 76. I guess I need code which can handle this variability?
Star Strider
Star Strider il 22 Gen 2015
Modificato: Star Strider il 22 Gen 2015
My pleasure.
Did you run my code on your data? The distance between the peaks should not be a problem.
If my code did not work with your data, I need to know what the problem was. Otherwise, you may need to save your data to a .mat file and attach it here in order for me to adapt my code to work with it.

Accedi per commentare.


Guillaume
Guillaume il 22 Gen 2015
Modificato: Guillaume il 22 Gen 2015
Rule 1: Don't stick your time series into individual variables. Stick them into a cell array:
tseries = {var1 var2 var3 var4 ...};
It makes it so much easier to process them all at the same time.
It's then a matter of cumsum ing the last and first value of each vector, and adding that to the next vector minus the first value of the vector:
tseries = {1:100 3:60 7:25 2:63}; %demo data
ends = [0 cumsum(cellfun(@(v) v(end), tseries(1:end-1)))]; %cumsum end of each array (without last one)
starts = [0 cumsum(cellfun(@(v) v(1), tseries(2:end)))];
tseries = cellfun(@(v, e, s) v+e-s, tseries, num2cell(ends), num2cell(starts), 'UniformOutput', false); %add offset

Categorie

Scopri di più su Time Series Events in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by