retime

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

Описание

пример

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

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

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

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

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

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

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

Чтобы интерполировать или заполнить значения в TT2 используя различные методы для различных переменных, задайте VariableContinuity свойство TT1. Для получения дополнительной информации смотрите Retime и Синхронизация переменных Timetable с использованием различных методов.

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

пример

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

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

пример

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

пример

TT2 = retime(TT1,newTimes,method) настраивает данные переменных расписания на временной вектор newTimes, с использованием метода, заданного как method. The 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 применяет тот же метод ко всем переменным 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

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

Рассчитать среднее значение для каждого чтения за часовые временные интервалы. Задайте, что время в строках выхода 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

Вычислите среднее значение с левыми краями в качестве времени строки. Средние значения отличаются от значений в 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'

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

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

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

Ребра

Описание

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

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

'right'

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

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

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

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

расширить все

Предупреждает, начиная с R2021a

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

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