exponenta event banner

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

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 или скаляр duration.

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

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

Новый временной вектор, заданный как вектор datetime или вектор duration. Новым вектором времени должен быть вектор-столбец. 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'

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

Методы агрегирования

Агрегирование данных из строк TT1 во временных ячейках, указанных временем строки TT2. Время каждой строки TT2 является левым краем ячейки времени, при этом следующая строка является правым краем. По умолчанию в ячейки времени включаются левые кромки. Для управления включением левого или правого края ячейки во временные ячейки используйте 'IncludedEdge' аргумент пары имя-значение.

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

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

Метод

Описание

'sum'

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

'mean'

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

'prod'

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

'min'

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

'max'

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

'count'

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

'firstvalue'

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

'lastvalue'

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

@func

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

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

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

Метод

Описание

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

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

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми 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

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

.
Представлен в R2016b