Main Content

retime

timetable 内のデータをリサンプルまたは集約し、重複する時間や不規則な時間を解決

説明

TT2 = retime(TT1,newTimeStep,method) は、TT1 からの変数と、タイム ステップ newTimeStep で等間隔の行時間を含む timetable を返します。関数 retime は、method で指定した関数を使用して、TT1 の変数のデータをリサンプリングまたは集計します。retime を使用して、次のことができます。

  • TT1 のデータ値からさまざまな時間で内挿

  • データを時間ビンに集約 (たとえば、月次データから四半期平均を含む timetable を作成)

  • 重複する行時間をもつ TT1 から行を削除

  • newTimeStep は規則的な行時間を指定するため、不規則な timetable を規則的な timetable に変換

入力引数 newTimeStep は、事前定義されたタイム ステップを指定する文字ベクトルまたは string です。たとえば、newTimeStep'daily'method'mean' の場合、TT2 には TT1 のデータの日次平均が含まれます。

TT2 の最初の行時間は、TT1 の最も早い行時間よりも前のタイム ステップにあります。TT2 の行時間は TT1 の行時間の範囲をカバーします。ただし、TT2 には TT1 の実際の行時間が 1 つも含まれない場合があります。これは、TT1 が、TT2 の規則的な行時間に当たる行時間を 1 つも含まない可能性があるためです。

異なる変数に対して異なる方法を使用して値を TT2 に内挿または入力するには、TT1VariableContinuity プロパティを指定します。詳細については、さまざまなメソッドを使用した timetable 変数の時間再調整と同期を参照してください。

複数の timetable からデータをリサンプルまたは集約するには、synchronize を参照してください。

TT2 = retime(TT1,'regular',method,'TimeStep',dt) は、タイム ステップ dt を使用して等間隔の行時間を計算します。入力引数 dt は、任意のサイズのタイム ステップを指定するスカラーの duration またはカレンダー期間です。TT2 の行時間は、TT1 の行時間の範囲にまたがります。

この構文は、タイム ステップが、文字ベクトルまたは string として指定できる事前定義されたタイム ステップではない場合に使用します。

TT2 = retime(TT1,'regular',method,'SampleRate',Fs) は、サンプル レート Fs を使用して等間隔の行時間を計算します。入力引数 Fs は、1 秒あたりのサンプル数 (Hz) を指定する正の数値スカラーです。

TT2 = retime(TT1,newTimes,method) は、method で指定したメソッドを使用して、timetable 変数データを時間ベクトル newTimes に合わせて調整します。newTimes 時間ベクトルは不規則な場合もありますが、並べ替えた datetime または duration ベクトルでなければならず、一意の値を含まなければなりません。newTimes の時間は TT2 の行時間になります。

TT2 = retime(TT1,newTimeStep) は、'fillwithmissing' メソッドを使用して timetable データを調整します。TT2 には、TT2 の行時間が TT1 のいずれの行時間とも一致しない部分に欠損データのインジケーターが含まれます。

TT1 に行時間の重複する行があり、TT2 に重複と一致する行時間がある場合、TT2 には、一致する重複行時間をもつ TT1 内の各行グループからの最初の行が含まれます。

TT2 = retime(TT1,'regular','TimeStep',dt) は、タイム ステップ dt を使用して等間隔の行時間を計算し、必要があれば欠損データ インジケーターを挿入します。

TT2 = retime(TT1,'regular','SampleRate',Fs) は、サンプル レート Fs を使用して等間隔の行時間を計算し、必要があれば欠損データ インジケーターを挿入します。

TT2 = retime(TT1,newTimes) は、newTimesTT1 の行時間と一致しない部分に欠損データのインジケーターが含まれる timetable を返します。

TT2 = retime(___,Name,Value) は、1 つ以上の Name,Value ペアで指定された追加オプションを使用して、timetable データを調整します。この構文では、前述のいずれかの構文の入力引数を使用できます。

すべて折りたたむ

時間に若干の不規則性をもつ、ほぼ 1 時間ごとの timetable データを作成します。データを内挿し、出力 timetable が 1 時間ごとの規則的な行時間をもつようにします。

Time = datetime({'2015-12-18 07:02:12';'2015-12-18 08:00:47';...
                 '2015-12-18 09:01:37';'2015-12-18 10:03:10';...
                 '2015-12-18 10:59:34'});
Temp = [37.3;41.9;45.7;42.3;39.8];
Pressure = [30.1;29.9;30.03;29.9;29.8];
TT = timetable(Time,Temp,Pressure)
TT=5×2 timetable
            Time            Temp    Pressure
    ____________________    ____    ________

    18-Dec-2015 07:02:12    37.3      30.1  
    18-Dec-2015 08:00:47    41.9      29.9  
    18-Dec-2015 09:01:37    45.7     30.03  
    18-Dec-2015 10:03:10    42.3      29.9  
    18-Dec-2015 10:59:34    39.8      29.8  

3 次スプライン内挿でリサンプルするには、'spline' を指定します。

TT2 = retime(TT,'hourly','spline')
TT2=5×2 timetable
            Time             Temp     Pressure
    ____________________    ______    ________

    18-Dec-2015 07:00:00    37.228     30.124 
    18-Dec-2015 08:00:00    41.824     29.899 
    18-Dec-2015 09:00:00    45.694     30.029 
    18-Dec-2015 10:00:00    42.552      29.91 
    18-Dec-2015 11:00:00    39.808       29.8 

15 分ごとに取得した温度とパルスの測定値をもつ timetable を作成します。

Time = [minutes(0):minutes(15):minutes(105)]';
Temp = [98;97.5;97.9;98.1;97.9;98;98.3;97.8];
Pulse = [80;75;73;68;69;65;72;71];
TT = timetable(Time,Temp,Pulse)
TT=8×2 timetable
     Time      Temp    Pulse
    _______    ____    _____

    0 min        98     80  
    15 min     97.5     75  
    30 min     97.9     73  
    45 min     98.1     68  
    60 min     97.9     69  
    75 min       98     65  
    90 min     98.3     72  
    105 min    97.8     71  

1 時間ごとの時間ビンにおける各測定値の平均を計算します。データを時間ビンに集約する際、出力 timetable の行時間が時間ビンの左側のエッジとなります。

TT2 = retime(TT,'hourly','mean')
TT2=2×2 timetable
     Time      Temp     Pulse
    ______    ______    _____

    0 min     97.875       74
    60 min        98    69.25

約 30 分おきに取得した時刻、温度および圧力の測定値を含む timetable を作成します。ただし、9:00 AM の測定値は指定しません。

Time = datetime({'2015-12-18 07:29:53';'2015-12-18 08:00:00';...
                 '2015-12-18 08:31:02';'2015-12-18 09:30:00'});
Temp = [37.3;41.9;45.7;39.8];
Pressure = [30.1;29.9;30.03;29.8];
TT1 = timetable(Time,Temp,Pressure)
TT1=4×2 timetable
            Time            Temp    Pressure
    ____________________    ____    ________

    18-Dec-2015 07:29:53    37.3      30.1  
    18-Dec-2015 08:00:00    41.9      29.9  
    18-Dec-2015 08:31:02    45.7     30.03  
    18-Dec-2015 09:30:00    39.8      29.8  

30 分のタイム ステップを指定します。30 分は事前定義されているタイム ステップではないため、名前と値のペアの引数 'TimeStep' を使用して duration 値として指定しなければなりません。線形内挿を使用して TT1 からデータをリサンプリングします。

dt = minutes(30);
TT2 = retime(TT1,'regular','linear','TimeStep',dt)
TT2=6×2 timetable
            Time             Temp     Pressure
    ____________________    ______    ________

    18-Dec-2015 07:00:00    32.736     30.298 
    18-Dec-2015 07:30:00    37.318     30.099 
    18-Dec-2015 08:00:00      41.9       29.9 
    18-Dec-2015 08:30:00    45.573     30.026 
    18-Dec-2015 09:00:00    42.802     29.917 
    18-Dec-2015 09:30:00      39.8       29.8 

データの列ベクトルを使用して timetable を作成します。行時間は 10 ~ 50 ミリ秒です。

Intensity = [100 98.7 95.2 101.4 99.1]';
Time = milliseconds([11 20 34 40.3 49.9])';
TT1 = timetable(Time,Intensity)
TT1=5×1 timetable
       Time       Intensity
    __________    _________

    0.011 sec         100  
    0.02 sec         98.7  
    0.034 sec        95.2  
    0.0403 sec      101.4  
    0.0499 sec       99.1  

100 Hz のサンプル レートを使用して、TT1 のデータをリサンプリングします。

TT2 = retime(TT1,'regular','linear','SampleRate',100)
TT2=5×1 timetable
      Time      Intensity
    ________    _________

    0.01 sec     100.14  
    0.02 sec       98.7  
    0.03 sec       96.2  
    0.04 sec      101.1  
    0.05 sec     99.076  

時間、温度、圧力の測定値を含む timetable を作成します。

Time = datetime({'2015-12-18 07:29:53';'2015-12-18 08:00:00';...
                 '2015-12-18 08:31:02';'2015-12-18 09:30:00'});
Temp = [37.3;41.9;45.7;39.8];
Pressure = [30.1;29.9;30.03;29.8];
TT1 = timetable(Time,Temp,Pressure)
TT1=4×2 timetable
            Time            Temp    Pressure
    ____________________    ____    ________

    18-Dec-2015 07:29:53    37.3      30.1  
    18-Dec-2015 08:00:00    41.9      29.9  
    18-Dec-2015 08:31:02    45.7     30.03  
    18-Dec-2015 09:30:00    39.8      29.8  

時間ベクトルを作成し、timetable データをベクトルの時間で内挿します。この時間ベクトルは午前 8 時に開始します。名前と値のペアの引数 'TimeStep' を代わりに使用する場合、出力 timetable は午前 7 時に開始します。時間ベクトルを使用する理由のひとつは、出力 timetable が指定した時間で開始および終了するようにすることです。

newTimes = [datetime('2015-12-18 08:00:00'):minutes(30):datetime('2015-12-18 09:30:00')];
TT2 = retime(TT1,newTimes,'linear')
TT2=4×2 timetable
            Time             Temp     Pressure
    ____________________    ______    ________

    18-Dec-2015 08:00:00      41.9       29.9 
    18-Dec-2015 08:30:00    45.573     30.026 
    18-Dec-2015 09:00:00    42.802     29.917 
    18-Dec-2015 09:30:00      39.8       29.8 

時間および風速と風向きの測定値を含む timetable を作成します。

Time = datetime({'2015-12-18 07:00:00';'2015-12-18 08:03:47';...
                 '2015-12-18 09:00:00';'2015-12-18 10:00:00';...
                 '2015-12-18 10:59:34'});
WindSpeed = [13.4;6.5;7.3;8.5;2.3];
WindDirection = categorical({'NE';'N';'NE';'NW';'W'});
TT1 = timetable(Time,WindSpeed,WindDirection)
TT1=5×2 timetable
            Time            WindSpeed    WindDirection
    ____________________    _________    _____________

    18-Dec-2015 07:00:00      13.4            NE      
    18-Dec-2015 08:03:47       6.5            N       
    18-Dec-2015 09:00:00       7.3            NE      
    18-Dec-2015 10:00:00       8.5            NW      
    18-Dec-2015 10:59:34       2.3            W       

データを 1 時間ごとの時間ベクトルに調整します。TT1 の毎時の時間ベクトルでデータがない部分に対応する TT2 の箇所に、欠損データ インジケーターを挿入します。

TT2 = retime(TT1,'hourly')
TT2=5×2 timetable
            Time            WindSpeed    WindDirection
    ____________________    _________    _____________

    18-Dec-2015 07:00:00      13.4        NE          
    18-Dec-2015 08:00:00       NaN        <undefined> 
    18-Dec-2015 09:00:00       7.3        NE          
    18-Dec-2015 10:00:00       8.5        NW          
    18-Dec-2015 11:00:00       NaN        <undefined> 

timetable を読み込みます。異なる変数に対して異なるメソッドを指定して関数 retime を使用し、timetable 変数を調整します。

ボストンの気温、風速、降水量の測定値をもつ timetable を読み込みます。

load bostonTT
Boston
Boston=6×3 timetable
           Time            Temp    WindSpeed    Rain
    ___________________    ____    _________    ____

    2016-06-09 06:03:00    59.5       0.1       0.05
    2016-06-09 12:00:23      63       2.3       0.08
    2016-06-09 18:02:57    61.7       3.1       0.13
    2016-06-10 06:01:47    55.4       5.7       0.15
    2016-06-10 12:06:00    62.3       2.6       0.87
    2016-06-10 18:02:57    58.8       6.2       0.33

データを調整して日次の平均気温と風速、および合計降水量を求めます。retime はすべての timetable 変数に同じメソッドを適用します。異なるメソッドを適用するには、timetable にインデックスを指定して変数を選択し、使用するメソッドごとに retime を呼び出します。

BOS = Boston(:,{'Temp','WindSpeed'});
TT1 = retime(BOS,'daily','mean')
TT1=2×2 timetable
           Time             Temp     WindSpeed
    ___________________    ______    _________

    2016-06-09 00:00:00      61.4     1.8333  
    2016-06-10 00:00:00    58.833     4.8333  

BOS = Boston(:,'Rain');
TT2 = retime(BOS,'daily','sum')
TT2=2×1 timetable
           Time            Rain
    ___________________    ____

    2016-06-09 00:00:00    0.26
    2016-06-10 00:00:00    1.35

1 つの timetable にすべての結果を組み合わせるには、TT1TT2 を連結します。

TT = [TT1 TT2]
TT=2×3 timetable
           Time             Temp     WindSpeed    Rain
    ___________________    ______    _________    ____

    2016-06-09 00:00:00      61.4     1.8333      0.26
    2016-06-10 00:00:00    58.833     4.8333      1.35

timetable データを時間単位のビンにビン化します。時間ビンの右端 (終了時間) を行時間として指定します。既定では、時間ビンの左端 (開始時間) は行時間です。

15 分の間隔で取得した温度とパルスの測定値をもつ timetable を作成します。

Time = [minutes(15):minutes(15):minutes(105)]';
Temp = [97.5;97.9;98.1;97.9;98;98.3;97.8];
Pulse = [75;73;68;69;65;72;71];
TT = timetable(Time,Temp,Pulse)
TT=7×2 timetable
     Time      Temp    Pulse
    _______    ____    _____

    15 min     97.5     75  
    30 min     97.9     73  
    45 min     98.1     68  
    60 min     97.9     69  
    75 min       98     65  
    90 min     98.3     72  
    105 min    97.8     71  

1 時間ごとの時間ビンにおける各測定値の平均を計算します。出力 timetable の行時間が時間ビンの右端になるように指定します。右端が含まれるため、60 分での測定値が最初の時間ビンに含まれます。

TT2 = retime(TT,'hourly','mean','IncludedEdge','right')
TT2=2×2 timetable
     Time       Temp     Pulse 
    _______    ______    ______

    60 min      97.85     71.25
    120 min    98.033    69.333

左端を行時間として、平均値を計算します。60 分での測定値が 2 番目の時間ビンに含まれているため、平均値は TT2 での平均値とは異なります。

TT3 = retime(TT,'hourly','mean')
TT3=2×2 timetable
     Time      Temp     Pulse
    ______    ______    _____

    0 min     97.833       72
    60 min        98    69.25

入力引数

すべて折りたたむ

入力 timetable。

出力 timetable の時間間隔のタイム ステップ。文字ベクトルとして指定します。newTimeStep は、表に示す事前定義されたタイム ステップのいずれかです。

タイム ステップ

説明

'yearly'

1 年

'quarterly'

1 四半期

'monthly'

1 か月

'weekly'

1 週間

'daily'

1 日

'hourly'

1 時間

'minutely'

1 分

'secondly'

1 秒

任意のサイズのタイム ステップ。datetime スカラーまたは duration スカラーとして指定します。

データ型: datetime | duration | calendarDuration

サンプル レート。正の数値スカラーとして指定します。Fs は 1 秒あたりのサンプル数 (Hz) を指定します。

新しい時間ベクトル。datetime ベクトルまたは duration ベクトルとして指定します。新しい時間ベクトルは列ベクトルでなければなりません。newTimesTT1 とは異なる数の行をもつことができます。

timetable データを調整するメソッド。文字ベクトル、string スカラー、または関数ハンドルとして指定します。以下に挙げるメソッドのいずれかを使用して TT1 のデータを調整できます。

埋め込みメソッド

TT2 の行時間が TT1 の行時間と一致する場合、TT1 の行からデータをコピーします。次に、TT2 の残りの行を欠損データのインジケーターで埋めます。

残りの行を欠損データのインジケーターではなく定数で埋めるには、method'fillwithconstant' を指定し、名前と値のペアの引数 'Constant' を使用します。

メソッド

説明

'fillwithmissing'

欠損データ インジケーター (たとえば数値変数の場合は NaN) でギャップを埋めます。

'fillwithconstant'

名前と値のペアの引数 'Constant' の値でギャップを埋めます。既定値は 0 です。

最近傍メソッド

指定したメソッドに応じて、TT1 の行のデータを、TT2 で行時間が最も近い行にコピーします。TT1 はその行時間で並べ替えられていなければなりません。

メソッド

説明

'previous'

行時間のベクトルの末尾から開始して、入力 timetable 内で先行する最近傍からデータをコピーします。重複する行時間がある場合、'previous' はその重複の最後を示します。

'next'

行時間のベクトルの先頭から開始して、入力 timetable 内で後続の最近傍からデータをコピーします。重複する行時間がある場合、'next' はその重複の最初を示します。

'nearest'

入力 timetable の最近傍からデータをコピーします。

内挿メソッド

TT1 の近傍行のデータ値から TT2 のデータ値を内挿します。入力 timetable には、並べ替えられた一意の行時間がなければなりません。TT1 の最初と最後の行時間の範囲を超えるデータの外挿方法を制御するには、名前と値のペアの引数 'EndValues' を使用します。

メソッド

説明

'linear'

線形内挿を使用します。

'spline'

区分的 3 次スプライン内挿を使用します。

'pchip'

形状維持区分的 3 次内挿を使用します。

'makima'

修正 Akima 3 次エルミート内挿を使用します。

集約メソッド

TT1 の行のデータを TT2 の行時間で指定された時間ビンに集約します。TT2 の各行時間は時間ビンの左側のエッジで、次に続く行時間は右側のエッジです。既定では、左側のエッジが時間ビンに含まれます。時間ビンにビンの左側と右側のどちらのエッジが含まれるかを制御するには、名前と値のペアの引数 'IncludedEdge' を使用します。

時間ベクトル newTimes を指定する場合、newTimes は昇順に並べ替えられていなければなりません。

func を除いて、一覧のすべてのメソッドは NaNNaT およびその他の欠損データ インジケーターを省略します。欠損データ インジケーターを含めるには、データ集約時にこれらを含む関数に、関数ハンドルとして func を指定します。

メソッド

説明

'sum'

各時間ビン内の値を合計します。

'prod'

各時間ビン内の値の積を計算します。

'mean'

各時間ビン内の平均値を計算します。

'median'

各時間ビン内の中央値を計算します。

'mode'

各時間ビン内の最頻値を計算します。

'min'

各時間ビン内の最小値を計算します。

'max'

各時間ビン内の最大値を計算します。

'count'

各時間ビン内の値の数をカウントします。

'firstvalue'

各時間ビン内の最初の値を使用します。

'lastvalue'

各時間ビン内の最後の値を使用します。

@func

関数ハンドルで指定された関数を使用します (たとえば、各時間ビン内の値の標準偏差を計算する @std など)。func はスカラーまたは行ベクトルの出力引数を返し、空の入力を受け入れなければなりません。

既定のメソッド

既定のメソッドは、method を指定せずにおく場合と等価になります。

メソッド

説明

'default' (既定)

欠損データ インジケーターでギャップを埋めます。ただし、入力 timetable の VariableContinuity プロパティで変数ごとのメソッドが指定されている場合は、そのメソッドを使用します。

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

例: TT2 = retime(TT1,newTimes,'Constant',-1) は、timetable TT2 を作成し、TT2 の行のうち行時間が TT1 の行時間と一致しない行の要素に値 -1 を割り当てます。

メソッドが 'fillwithconstant' の場合にギャップを埋めるための値。'Constant' と配列で構成されるコンマ区切りのペアとして指定します。既定値は 0 です。'Constant' で指定する値のデータ型は、timetable 変数のデータ型と適合していなければなりません。

例: TT2 = retime(TT1,'hourly','fillwithconstant','Constant','NONE') は、TT2 のすべての変数にテキストが含まれている場合に、文字ベクトル 'NONE' を使用して TT2 のギャップを埋めます。

内挿法を使用する場合の外挿メソッド。'EndValues' と、'extrap' またはスカラーのいずれかで構成されるコンマ区切りのペアとして指定します。スカラーを指定した場合、そのデータ型はすべての timetable 変数に適合していなければなりません。

メソッド

説明

'extrap' (既定)

method 入力引数で指定されたメソッドにより外挿します。

スカラー

入力行時間の範囲外のギャップをスカラーで埋めて外挿します。

例: TT2 = retime(TT1,'daily','previous','EndValues',1000) は、TT2 のギャップを埋めます。TT2 の行時間が TT1 からの行時間の範囲内にある場合は前の行の値、TT2 の行時間がその範囲外にある場合は値 1000 が使用されます。

各時間ビンに含めるエッジ。'IncludedEdge' と、'left' または 'right' のいずれかで構成されるコンマ区切りのペアとして指定します。TT2 の各行時間は時間ビンの左側のエッジで、次に続く行時間は右側のエッジです。

含めるエッジ

説明

'left' (既定)

両側のエッジを含む最後のビンを除いて、すべてのビンが左側のビン エッジを含みます。

'right'

両側のエッジを含む最初のビンを除いて、すべてのビンが右側のビン エッジを含みます。

'left' を指定した場合、両側のエッジを含む最後のビンを除いて、時間ビンに左側のエッジが含まれます。'right' を指定した場合、両側のエッジを含む最初のビンを除いて、時間ビンに右側のエッジが含まれます。

例: TT2 = retime(TT1,'hourly','mean','IncludedEdge','right') では、各時間ビンの右側のエッジが含まれます。

拡張機能

バージョン履歴

R2016b で導入

すべて展開する