retime

Передискретизируйте или агрегированные данные в расписании и твердость дублирующиеся или неправильные времена

Описание

пример

TT2 = retime(TT1,newTimeStep,method) возвращает расписание, которое содержит переменные от TT1 и времена строки, которые расположены с равными интервалами временным шагом newTimeStep. retime функция передискретизирует или агрегировала данные в переменных TT1 использование функции задано method. Можно использовать retime к:

  • Интерполируйте значения данных от TT1 в разное время.

  • Агрегированные данные во временные интервалы (например, чтобы создать расписание, содержащее ежеквартальный, означает из ежемесячных данных).

  • Удалите строки из TT1 это имеет времена дублирующейся строки.

  • Превратите неправильное расписание в обычное расписание, начиная с newTimeStep задает регулярные времена строки.

newTimeStep входной параметр является вектором символов, или представьте в виде строки, который задает предопределенный временной шаг. Например, когда newTimeStep 'daily', и method 'mean', затем TT2 содержит среднесуточные значения данных из TT1.

В первый раз строки TT2 находится на временном шаге перед самым ранним временем строки от TT1. Времена строки в TT2 покройте область значений времен строки от TT1. Однако TT2 не может включать ни одно из фактических времен строки от TT1, начиная с TT1 не может иметь никаких времен строки, которые падают на любое из регулярных времен строки TT2.

Интерполировать или заполнить значения в TT2 с помощью различных методов для различных переменных задайте VariableContinuity свойство TT1. Для получения дополнительной информации смотрите, Повторно синхронизируют и Синхронизируют Переменные Расписания Используя Различные Методы.

Чтобы передискретизировать или агрегированные данные из нескольких расписаний, смотрите synchronize.

пример

TT2 = retime(TT1,'regular',method,'TimeStep',dt) вычисляет расположенные с равными интервалами времена строки с помощью временного шага dt. dt входной параметр является скалярной длительностью или календарной длительностью, задавая временной шаг любого размера. Времена строки TT2 породите линейную оболочку столбцов времен строки TT1.

Используйте этот синтаксис, когда временной шаг не является одним из предопределенных временных шагов, можно задать как вектор символов или строка.

пример

TT2 = retime(TT1,'regular',method,'SampleRate',Fs) вычисляет расположенные с равными интервалами времена строки с помощью частоты дискретизации Fs. Fs входной параметр является положительным числовым скаляром, который задает количество отсчетов в секунду (Гц).

пример

TT2 = retime(TT1,newTimes,method) настраивает данные о переменных расписания к временному вектору newTimes, использование метода задано method. newTimes временной вектор может быть неправильным, но это должно быть отсортированным datetime или вектором длительности и содержать уникальные значения. Времена в newTimes станьте временами строки TT2.

пример

TT2 = retime(TT1,newTimeStep) настраивает данные о расписании с помощью 'fillwithmissing' метод. 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) возвращает расписание, содержащее индикаторы недостающих данных везде, где newTimes не совпадает с временами строки в TT1.

пример

TT2 = retime(___,Name,Value) настраивает данные о расписании с помощью дополнительных опций, заданных одним или несколькими Name,Value пары. Можно использовать этот синтаксис с входными параметрами любого из предыдущих синтаксисов.

Примеры

свернуть все

Создайте данные о расписании, которые являются приблизительно каждый час, но с некоторой неисправностью во времена. Интерполируйте данные так, чтобы выходное расписание имело регулярные почасовые времена строки.

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  

Чтобы передискретизировать с интерполяцией кубическим сплайном, задайте '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 

Создайте расписание с температурными и импульсными показаниями, снимаемыми каждые пятнадцать минут.

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  

Вычислите среднее значение для каждого перечитывания по почасовым временным интервалам. Когда вы агрегированные данные в зависимости от времени интервалы, времена строки выходного расписания являются левыми краями временных интервалов.

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

    0 min     97.875       74
    60 min        98    69.25

Создайте расписание, которое содержит времена, температуру и показания давления, снятые приблизительно в получасовой метке, но с одним измерением с 9:00, отсутствующим.

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' аргумент пары "имя-значение". Передискретизируйте данные из 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 

Создайте расписание с помощью вектор-столбцов данных. Времена строки между 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  

Передискретизируйте данные в TT1 использование частоты дискретизации 100 Гц.

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  

Создайте расписание, которое содержит времена, температуру и показания давления.

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  

Создайте временной вектор и интерполируйте данные о расписании в те времена в векторе. Этот временной вектор запускается в 8:00. Если вы вместо этого используете 'TimeStep' аргумент пары "имя-значение", затем выходное расписание запустилось бы в 7:00. Одна причина использовать временной вектор состоит в том, чтобы гарантировать, что выходное расписание запускается, и концы, с временами, которые вы задаете.

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 

Создайте расписание, которое содержит времена и измерения скорости ветра и направления.

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       

Настройте данные к почасовому временному вектору. Вставьте индикаторы недостающих данных в TT2 где TT1 не имеет данных по почасовому временному вектору.

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> 

Загрузите расписание. Настройте переменные расписания с помощью retime функционируйте и различные методы для различных переменных.

Загрузите расписание с температурой, скоростью ветра и измерениями ливня для Бостона.

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 применяет тот же метод ко всем переменным расписания. Чтобы применить различные методы, индексируйте в расписание, чтобы выбрать переменные и вызвать 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

Чтобы объединить все результаты в одном расписании, конкатенируйте TT1 и TT2.

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

Данные о расписании интервала в почасовые интервалы. Задайте правые края, или время окончания, временных интервалов как времена строки. По умолчанию, левые края, или запускают времена временных интервалов, времена строки.

Создайте расписание с температурными и импульсными показаниями, снятыми в интервалах пятнадцати минут.

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  

Вычислите среднее значение для каждого перечитывания по почасовым временным интервалам. Укажите, что времена строки выходного расписания являются правыми краями временных интервалов. Поскольку правые края включены, чтение в 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

Вычислите средние значения с левыми краями как времена строки. Средние значения отличаются от тех в TT2, потому что чтение в 60 минут находится теперь в интервале второго раза.

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

    0 min     97.833       72
    60 min        98    69.25

Входные параметры

свернуть все

Введите расписание.

Временной шаг для разрядки времен в выходном расписании в виде вектора символов. newTimeStep может быть любой из предопределенных временных шагов в таблице.

Временной шаг

Описание

'yearly'

Один год

'quarterly'

Одна четверть

'monthly'

Один месяц

'weekly'

Одна неделя

'daily'

Однажды

'hourly'

Один час

'minutely'

Одна минута

'secondly'

Одна секунда

Временной шаг любого размера в виде скаляра datetime или скаляра длительности.

Типы данных: datetime | duration | calendarDuration

Частота дискретизации в виде положительного числового скаляра. Fs задает количество отсчетов в секунду (Гц).

Новый временной вектор в виде вектора datetime или вектора длительности. Новый временной вектор должен быть вектор-столбцом. newTimes может иметь различное количество строк, чем TT1.

Метод для корректировки данных о расписании в виде вектора символов, строкового скаляра или указателя на функцию. Можно использовать любой из перечисленных методов, перечисленных, чтобы настроить данные из TT1.

Методы заполнения

Скопируйте данные из строк TT1 когда времена строки TT2 совпадайте с временами строки TT1. Затем заполните остающиеся строки TT2 с индикаторами недостающих данных.

Чтобы заполнить остающиеся строки константой вместо индикатора недостающих данных, задайте method как 'fillwithconstant' и используйте 'Constant' аргумент пары "имя-значение".

Метод

Описание

'fillwithmissing'

Заполните разрывы индикаторами недостающих данных (например, NaN для числовых переменных).

'fillwithconstant'

Заполните разрывы значением 'Constant' аргумент пары "имя-значение". Значение по умолчанию 0.

Самые близкие соседние методы

Скопируйте данные из строк TT1 к строкам TT2 чьи времена строки являются самым близким соответствием, согласно заданному методу. TT1 должен быть отсортирован по его временам строки.

Метод

Описание

'previous'

Скопируйте данные от самого близкого предыдущего соседа во входном расписании, происхождение конца вектора времен строки. Если существуют времена дублирующейся строки, то 'previous' указывает на последнюю из копий.

'next'

Скопируйте данные от самого близкого следующего соседа во входном расписании, происхождение начала вектора времен строки. Если существуют времена дублирующейся строки, то 'next' указывает на первую из копий.

'nearest'

Скопируйте данные от самого близкого соседа во входном расписании.

Методы интерполяции

Интерполируйте значения данных в TT2 от значений данных в соседних строках TT1. Входное расписание должно иметь времена строки, которые сортируются и уникальны. Управлять, как данные экстраполируются вне первых и последних времен строки TT1, используйте 'EndValues' аргумент пары "имя-значение".

Метод

Описание

'linear'

Используйте линейную интерполяцию.

'spline'

Используйте кусочную интерполяцию кубическим сплайном.

'pchip'

Используйте сохраняющую форму кусочную кубичную интерполяцию.

'makima'

Используйте измененного Акима кубическая интерполяция Эрмита.

Методы агрегации

Агрегированные данные из строк TT1 в зависимости от времени интервалы заданы временами строки TT2. Каждый раз строки TT2 левый край временного интервала, со следующим разом строки подряд, будучи правым краем. По умолчанию левые края включены во временные интервалы. Чтобы управлять, включены ли левые или правильные границы интервала во временные интервалы, используйте 'IncludedEdge' аргумент пары "имя-значение".

Если вы задаете временной вектор newTimes, затем newTimes должен быть отсортирован в порядке возрастания.

Все перечисленные методы не используют NaNs, NaTs, и другие индикаторы недостающих данных, за исключением func. Чтобы включать индикаторы недостающих данных, задайте func как указатель на функцию к функции, которая включает их при агрегации данных.

Метод

Описание

'sum'

Суммируйте значения в каждом временном интервале.

'prod'

Вычислите продукт значений в каждом временном интервале.

'mean'

Вычислите среднее значение значений в каждом временном интервале.

'median'

Вычислите медиану значений в каждом временном интервале.

'mode'

Вычислите режим значений в каждом временном интервале.

'min'

Вычислите минимум значений в каждом временном интервале.

'max'

Вычислите максимум значений в каждом временном интервале.

'count'

Считайте количество значений в каждом временном интервале.

'firstvalue'

Используйте первое значение в каждом временном интервале.

'lastvalue'

Используйте последнее значение в каждом временном интервале.

@func

Используйте функцию, заданную указателем на функцию (например, @std вычислить стандартное отклонение для значений в каждом временном интервале). func должен возвратить выходной аргумент, который является скаляром или вектором-строкой, и должен принять пустые входные параметры.

Метод по умолчанию

Метод по умолчанию эквивалентен отъезду method незаданный.

Метод

Описание

'default' (значение по умолчанию)

Или заполните разрывы индикаторами недостающих данных или используйте методы на переменную, если они заданы VariableContinuity свойство входного расписания.

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: TT2 = retime(TT1,newTimes,'Constant',-1) создает расписание TT2 и присваивает значение -1 к элементам в строках TT2 с временами строки, которые не совпадают с временами строки от TT1.

Значение для заполнения разрывает, когда методом является 'fillwithconstant'В виде разделенной запятой пары, состоящей из 'Constant' и массив. Значение по умолчанию 0. Тип данных значения задан 'Constant' должно быть совместимо с типами данных переменных расписания.

Пример: TT2 = retime(TT1,'hourly','fillwithconstant','Constant','NONE') заливки разрывают в TT2 с вектором символов 'NONE' когда все переменные в TT2 содержите текст.

Метод для экстраполяции при использовании метода интерполяции в виде разделенной запятой пары, состоящей из 'EndValues' и любой 'extrap' или скаляр. Если вы задаете скаляр, то его тип данных должен быть совместим со всеми переменными расписания.

Метод

Описание

'extrap' (значение по умолчанию)

Экстраполируйте использование метода, заданного method входной параметр

скаляр

Экстраполируйте путем заполнения разрывов вне области значений входных времен строки со скаляром

Пример: TT2 = retime(TT1,'daily','previous','EndValues',1000) заливки разрывают в TT2 с предыдущими значениями строки, где TT2 имеет времена строки в области значений времен строки от TT1, и со значением 1000 где TT2 имеет времена строки вне той области значений.

Ребра, чтобы включать в каждый временной интервал в виде разделенной запятой пары, состоящей из 'IncludedEdge' и любой 'left' или 'right'. Каждый раз строки TT2 левый край временного интервала, со следующим разом строки подряд, будучи правым краем.

Ребра, чтобы включать

Описание

'left' (значение по умолчанию)

Все интервалы включают левую границу интервала, за исключением последнего интервала, который включает оба ребра

'right'

Все интервалы включают правильную границу интервала, за исключением первого интервала, который включает оба ребра

Если вы задаете 'left', затем временные интервалы включают левые края за исключением последнего интервала, который включает оба ребра. Если вы задаете 'right', затем временные интервалы включают правые края за исключением первого интервала, который включает оба ребра.

Пример: TT2 = retime(TT1,'hourly','mean','IncludedEdge','right') включает правильную границу интервала каждого временного интервала.

Вопросы совместимости

развернуть все

Предупреждает запуск в R2021a

Расширенные возможности

Введенный в R2017b
Для просмотра документации необходимо авторизоваться на сайте