改变时间序列和相应的数据

时间:2014-10-22 11:42:29

标签: matlab

我想将我的时间向量(T1)及其相应的数据(Data1)更改为新的时间向量(T2),并在相应的数据(Data2)中包含Nan。 例如: -

T1                        Data1
01-Sep-2007 00:00:30       0.01
01-Sep-2007 00:01:30       0.02
01-Sep-2007 00:02:30       0.03
01-Sep-2007 00:03:30       0.05
01-Sep-2007 00:04:29       0.08
01-Sep-2007 00:07:30       0.09
01-Sep-2007 00:09:29       0.05

我想将T1和Data1更改为新的矢量T2和Data2,我希望如下所示: -

T2                        Data2
01-Sep-2007 00:00:00       0.01
01-Sep-2007 00:01:00       0.02
01-Sep-2007 00:02:00       0.03
01-Sep-2007 00:03:00       0.05
01-Sep-2007 00:04:00       0.08
01-Sep-2007 00:05:00       NaN
01-Sep-2007 00:06:00       NaN
01-Sep-2007 00:07:00       0.09
01-Sep-2007 00:08:00       NaN
01-Sep-2007 00:09:00       0.05

请有人可以帮我这个,因为我不知道一种方法可以做到这一点我MATLAB.Any帮助将不胜感激! 在此先感谢.. Shital

2 个答案:

答案 0 :(得分:2)

我们假设您拥有t1data

>> t1, data1

t1 =

01-Sep-2007 00:00:30
01-Sep-2007 00:01:30
01-Sep-2007 00:02:30
01-Sep-2007 00:03:30
01-Sep-2007 00:04:29
01-Sep-2007 00:07:30
01-Sep-2007 00:09:29


data1 =

    0.0100
    0.0200
    0.0300
    0.0500
    0.0800
    0.0900
    0.0500

首先,您要将t1变为日期

>> t1 = datenum(t1);

然后将其四舍五入到上一分钟

>> dt = 1 / 24 / 60;
>> t1_rounded = floor(t1 / dt) * dt;

现在您可以创建t2向量

>> t2 = (min(t1_rounded):dt:max(t1_rounded))';

并使用histc命令的第二个输出来匹配索引 -

>> [~, index] = histc(t1, [t2; Inf]);

最终Inf会抓住t2向量末尾的任何内容。最后,您只需创建新的数据向量以充满NaN s并分配给它。

>> data2 = NaN(size(t2));
>> data2(index) = data1;

所以你的结果是

>> datestr(t2), data2

ans =

01-Sep-2007 00:00:00
01-Sep-2007 00:01:00
01-Sep-2007 00:02:00
01-Sep-2007 00:03:00
01-Sep-2007 00:04:00
01-Sep-2007 00:05:00
01-Sep-2007 00:06:00
01-Sep-2007 00:07:00
01-Sep-2007 00:08:00
01-Sep-2007 00:09:00


data2 =

    0.0100
    0.0200
    0.0300
    0.0500
    0.0800
       NaN
       NaN
    0.0900
       NaN
    0.0500

答案 1 :(得分:0)

所以你的第一步是将T1舍入到最近的30秒(可能是这样:round(T1/dt)*dt,但这取决于你的数据)。然后你可以像这样生成T2

dt = 1/(2*60*24);
T2 = min(T1_rounded):dt:max(T1_rounded);

或者很可能

T2 = (T1_rounded(1):dt:T1_rounded(end))';

严格来说,此时您需要再次对T2进行舍入,以避免在ismember步骤中出现可能的(实际可能的)浮点算术错误...

T2 = round(T2/dt)*dt

现在将Data2初始化为正确的尺寸但充满NaN s:

Data2 = NaN(size(T2))

最后找到正确的索引:

ind = ismember(T2, T1_rounded)

并应用它们:

Data2(ind) = Data1