exponenta event banner

fillmissing

Заполнить отсутствующие значения

Описание

пример

F = fillmissing(A,'constant',v) заполняет отсутствующие записи массива или таблицы значением константы v. Если A является матрицей или многомерным массивом, то v может быть скаляром или вектором. Когда v является вектором, каждый элемент задает значение заливки в соответствующем столбце A. Если A является таблицей или расписанием, то v также может быть массивом ячеек, элементы которого содержат значения заливки для каждой переменной таблицы.

Отсутствующие значения определяются в соответствии с типом данных A:

  • NaNdouble, single, duration, и calendarDuration

  • NaTdatetime

  • <missing>string

  • <undefined>categorical

  • ' 'char

  • {''}cell массивов символов

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

пример

F = fillmissing(A,method) заполняет отсутствующие записи методом, указанным method. Например, fillmissing(A,'previous') заполняет отсутствующие записи предыдущей отсутствующей записью A.

пример

F = fillmissing(A,movmethod,window) заполняет отсутствующие записи с использованием среднего или среднего значения движущегося окна с длиной окна window. Например, fillmissing(A,'movmean',5) заполняет данные скользящим средним, используя длину окна 5.

пример

F = fillmissing(A,fillfun,gapwindow) заполняет пробелы отсутствующих записей с помощью пользовательского метода, заданного дескриптором функции fillfun и фиксированное окно, окружающее каждый промежуток, по которому вычисляются значения заполнения. fillfun должны иметь входные аргументы xs, ts, и tq, которые являются векторами, содержащими данные выборки xs длины gapwindow, местоположения данных образцов ts длины gapwindowи отсутствующие местоположения данных tq. Расположения в ts и tq являются подмножеством вектора точек выборки.

пример

F = fillmissing(___,dim) задает размер A для работы вдоль. По умолчанию fillmissing работает вдоль первого размера, размер которого не равен 1. Например, если A является матрицей, то fillmissing(A,2) работает по столбцам A, заполнение отсутствующих строк данных по строкам.

пример

F = fillmissing(___,Name,Value) указывает дополнительные параметры для заполнения отсутствующих значений с использованием одного или нескольких аргументов пары имя-значение. Например, если t является вектором значений времени, то fillmissing(A,'linear','SamplePoints',t) интерполирует данные в A относительно времени в t.

пример

[F,TF] = fillmissing(___) также возвращает логический массив, соответствующий записям A которые были заполнены.

Примеры

свернуть все

Создание вектора, содержащего NaN значения и заменить каждое NaN с предыдущим отсутствующим значением.

A = [1 3 NaN 4 NaN NaN 5];
F = fillmissing(A,'previous')
F = 1×7

     1     3     3     4     4     4     5

Создание матрицы 2 на 2 с помощью NaN значение в каждом столбце. Заполниться NaN с 100 в первом столбце и 1000 во втором столбце.

A = [1 NaN; NaN 2]
A = 2×2

     1   NaN
   NaN     2

F = fillmissing(A,'constant',[100 1000])
F = 2×2

           1        1000
         100           2

Использовать интерполяцию для замены NaN значения в неравномерно дискретизированных данных.

Определите вектор неоднородных точек выборки и вычислите синусоидальную функцию над точками.

x = [-4*pi:0.1:0, 0.1:0.2:4*pi];
A = sin(x);

Ввести NaN значения в A.

A(A < 0.75 & A > 0.5) = NaN;

Заполните недостающие данные с помощью линейной интерполяции и верните заполненный вектор F и логический вектор TF. Значение 1 (true) в записях TF соответствует значениям F которые были заполнены.

[F,TF] = fillmissing(A,'linear','SamplePoints',x);

Постройте график исходных и заполненных данных.

plot(x,A,'.', x(TF),F(TF),'o')
xlabel('x');
ylabel('sin(x)')
legend('Original Data','Filled Missing Data')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Data, Filled Missing Data.

Используйте движущуюся медиану для заполнения отсутствующих числовых данных.

Создание вектора точек выборки x и вектор данных A содержит отсутствующие значения.

x = linspace(0,10,200); 
A = sin(x) + 0.5*(rand(size(x))-0.5); 
A([1:10 randi([1 length(x)],1,50)]) = NaN; 

Заменить NaN значения в A использование движущейся медианы с окном длиной 10 и печать как исходных данных, так и заполненных данных.

F = fillmissing(A,'movmedian',10);  
plot(x,F,'r.-',x,A,'b.-') 
legend('Filled Missing Data','Original Data')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Filled Missing Data, Original Data.

Определение пользовательской функции для заполнения NaN значения с предыдущим непутевым значением.

Определение вектора точек выборки t и вектор соответствующих данных A содержа NaN значения. Постройте график данных.

t = 10:10:100;
A = [0.1 0.2 0.3 NaN NaN 0.6 0.7 NaN 0.9 1];
plot(t,A,'o')

Figure contains an axes. The axes contains an object of type line.

Использовать локальную функцию forwardfill (определяется в конце примера), чтобы заполнить недостающие пробелы с помощью предыдущего значения, не допускающего ошибок. Входы дескриптора функции включают в себя:

  • xs - значения данных, используемые для заполнения

  • ts - расположение значений, используемых для заполнения, относительно точек отбора проб;

  • tq - расположение отсутствующих значений относительно точек выборки;

  • n - количество значений в заполняемом зазоре

n = 2;
gapwindow = [10 0];

[F,TF] = fillmissing(A,@(xs,ts,tq) forwardfill(xs,ts,tq,n),gapwindow,'SamplePoints',t);

Значение окна зазора [10 0] говорит fillmissing для рассмотрения одной точки данных перед отсутствующим промежутком и без точек данных после промежутка, так как предыдущее значение отсутствия ошибок расположено на 10 единиц перед промежутком. Входные значения дескриптора функции, определенные fillmissing для первого промежутка:

  • xs = 0.3

  • ts = 30

  • tq = [40 50]

Входные значения дескриптора функции для второго промежутка:

  • xs = 0.7

  • ts = 70

  • tq = 80

Постройте график исходных и заполненных данных.

plot(t,A,'o',t(TF),F(TF),'ro')

Figure contains an axes. The axes contains 2 objects of type line.

function y = forwardfill(xs,ts,tq,n)
% Fill n values in the missing gap using the previous nonmissing value
y = NaN(1,numel(tq));
y(1:min(numel(tq),n)) = xs;
end

Создайте матрицу с отсутствующими записями и заполните столбцы (второе измерение) по одной строке за раз с помощью линейной интерполяции. Для каждой строки заполните начальные и конечные отсутствующие значения ближайшим отсутствующим значением в этой строке.

A = [NaN NaN 5 3 NaN 5 7 NaN 9 NaN;
     8 9 NaN 1 4 5 NaN 5 NaN 5;
     NaN 4 9 8 7 2 4 1 1 NaN]
A = 3×10

   NaN   NaN     5     3   NaN     5     7   NaN     9   NaN
     8     9   NaN     1     4     5   NaN     5   NaN     5
   NaN     4     9     8     7     2     4     1     1   NaN

F = fillmissing(A,'linear',2,'EndValues','nearest')
F = 3×10

     5     5     5     3     4     5     7     8     9     9
     8     9     5     1     4     5     5     5     5     5
     4     4     9     8     7     2     4     1     1     1

Заполните отсутствующие значения для табличных переменных с различными типами данных.

Создание таблицы, переменные которой включают categorical, double, и char типы данных.

A = table(categorical({'Sunny';'Cloudy';''}),[66;NaN;54],{'';'N';'Y'},[37;39;NaN],...
    'VariableNames',{'Description' 'Temperature' 'Rain' 'Humidity'})
A=3×4 table
    Description    Temperature       Rain       Humidity
    ___________    ___________    __________    ________

    Sunny               66        {0x0 char}       37   
    Cloudy             NaN        {'N'     }       39   
    <undefined>         54        {'Y'     }      NaN   

Замените все отсутствующие записи значением из предыдущей записи. Поскольку нет предыдущего элемента в Rain переменная, отсутствующий вектор символов не заменяется.

F = fillmissing(A,'previous')
F=3×4 table
    Description    Temperature       Rain       Humidity
    ___________    ___________    __________    ________

      Sunny            66         {0x0 char}       37   
      Cloudy           66         {'N'     }       39   
      Cloudy           54         {'Y'     }       39   

Замените NaN значения из Temperature и Humidity переменные в A с 0.

F = fillmissing(A,'constant',0,'DataVariables',{'Temperature','Humidity'})
F=3×4 table
    Description    Temperature       Rain       Humidity
    ___________    ___________    __________    ________

    Sunny              66         {0x0 char}       37   
    Cloudy              0         {'N'     }       39   
    <undefined>        54         {'Y'     }        0   

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

F = fillmissing(A,'constant',0,'DataVariables',@isnumeric)
F=3×4 table
    Description    Temperature       Rain       Humidity
    ___________    ___________    __________    ________

    Sunny              66         {0x0 char}       37   
    Cloudy              0         {'N'     }       39   
    <undefined>        54         {'Y'     }        0   

Теперь заполните недостающие значения в A с указанной константой для каждой переменной таблицы, которые содержатся в массиве ячеек.

F = fillmissing(A,'constant',{categorical({'None'}),1000,'Unknown',1000})
F=3×4 table
    Description    Temperature       Rain        Humidity
    ___________    ___________    ___________    ________

      Sunny             66        {'Unknown'}        37  
      Cloudy          1000        {'N'      }        39  
      None              54        {'Y'      }      1000  

Создание вектора времени t в секундах и соответствующий вектор данных A который содержит NaN значения.

t = seconds([2 4 8 17 98 134 256 311 1001]);
A = [1 3 23 NaN NaN NaN 100 NaN 233];

Заполнить только отсутствующие значения в A которые соответствуют максимальному размеру зазора в 250 секунд. Поскольку второй промежуток больше 250 секунд, NaN значение не заполнено.

F = fillmissing(A,'linear','SamplePoints',t,'MaxGap',seconds(250))
F = 1×9

    1.0000    3.0000   23.0000   25.7944   50.9435   62.1210  100.0000       NaN  233.0000

Входные аргументы

свернуть все

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

Когда входной аргумент является массивом ячеек, он должен быть массивом ячеек символьных векторов. Если A является расписанием, то заполняются только табличные значения. Если связанный вектор времени строки содержит NaT или NaN значение, затем fillmissing приводит к ошибке. Время строк должно быть уникальным и перечисляться в порядке возрастания.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | cell | table | timetable | categorical | datetime | duration | calendarDuration

Константа заполнения, заданная как скаляр, вектор или массив ячеек.

v может быть вектором, когда A - матрица или многомерный массив, указывающий различное значение заливки для каждого рабочего размера. Длина v должен соответствовать длине рабочего размера.

v может быть массивом ячеек значений заливки, когда A - таблица или расписание, указывающее разное значение заливки для каждой переменной. Количество элементов в массиве ячеек должно соответствовать количеству переменных в таблице.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | cell | categorical | datetime | duration

Метод заливки, указанный как один из следующих:

МетодОписание
'previous'предыдущее не отсутствующее значение
'next'следующее не отсутствующее значение
'nearest'ближайшее не отсутствующее значение
'linear'линейная интерполяция соседних, не отсутствующих значений (числовых, duration, и datetime только типы данных)
'spline'кусочно-кубическая интерполяция сплайна (числовая, duration, и datetime только типы данных)
'pchip'формосохраняющая кусочно-кубическая интерполяция сплайна (числовая, duration, и datetime только типы данных)
'makima'модифицированная Akima кубическая эрмитовая интерполяция (числовая, duration, и datetime только типы данных)

Метод перемещения для заполнения отсутствующих данных, указанный как один из следующих:

МетодОписание
'movmean'Скользящее среднее по окну длины window (только числовые типы данных)
'movmedian'Перемещение медианы по окну длины window (только числовые типы данных)

Пример: @(xs,ts,tq) myfun(xs,ts,tq)

Пользовательский метод заливки, заданный как дескриптор функции. Допустимые дескрипторы функций должны включать следующие три входных аргумента:

Входной аргументОписание
xsВектор, содержащий значения данных, используемые для заполнения. Длина xs должен соответствовать длине указанного окна.
tsВектор, содержащий расположения значений, используемых для заполнения. Длина ts должен соответствовать длине указанного окна. ts является подмножеством вектора точек выборки.
tqВектор, содержащий местоположения отсутствующих значений. tq является подмножеством вектора точек выборки.

Функция должна возвращать скаляр или вектор той же длины, что и tq.

Длина окна для методов перемещения, заданная как положительный целочисленный скаляр, двухэлементный вектор положительных целых чисел, скаляр положительной длительности или двухэлементный вектор положительных длительностей. Окно определяется относительно точек образца.

Когда window является положительным целым скаляром, то окно центрировано относительно текущего элемента и содержит window-1 соседние элементы. Если window является четным, то окно центрировано относительно текущего и предыдущего элементов. Если window - двухэлементный вектор положительных целых чисел [b f], то окно содержит текущий элемент, b элементы назад, и f элементы вперед.

Когда A является расписанием или 'SamplePoints' указан как datetime или duration вектор, window должен иметь тип duration.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration

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

При указании дескриптора функции fillfun для метода заполнения значение gapwindow представляет фиксированную длину окна, которая окружает каждый промежуток отсутствующих значений во входных данных. Затем значение заполнения вычисляется с помощью fillfun с использованием значений в этом окне. Например, для точек образца по умолчанию t = 1:10 и данные A = [10 20 NaN NaN 50 60 70 NaN 90 100], длина окна gapwindow = 3 определяет первое окно как [20 NaN NaN 50] для которых fillfun используется для вычисления значения заполнения. Второе окно разрыва, для которого fillfun работает на [70 NaN 90].

Когда A является расписанием или 'SamplePoints' указан как datetime или duration вектор, window должен иметь тип duration.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration

Размерность для работы, заданная как целочисленный скаляр. Если значение не указано, то по умолчанию используется первый размер массива, размер которого не равен 1.

Когда A - таблица или расписание, dim не поддерживается. fillmissing работает по каждой таблице или переменной расписания отдельно.

Рассмотрим двухмерный входной массив, A.

  • Если dim=1, то fillmissing заполняется A столбец за столбцом.

  • Если dim=2, то fillmissing заполняется A строка за строкой.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

Пример: fillmissing(A,'DataVariables',{'Temperature','Altitude'}) заполняет только столбцы, соответствующие Temperature и Altitude переменные входной таблицы
Параметры данных

свернуть все

Точки выборки, указанные как пара, разделенная запятыми, состоящая из 'SamplePoints' и вектор. Точки выборки представляют расположение данных по оси X в A, и должны быть отсортированы и содержать уникальные элементы. Выборочные точки не нуждаются в равномерной выборке. Вектором точек выборки по умолчанию является [1 2 3 ...].

Примечание

Эта пара имя-значение не поддерживается, если входными данными являются timetable. В расписаниях всегда используется вектор времени строки в качестве точек выборки. Чтобы использовать различные точки выборки, необходимо отредактировать расписание так, чтобы время строки содержало нужные точки выборки.

Движущиеся окна определяются относительно точек образца. Например, если t является вектором времен, соответствующих входным данным, то fillmissing(rand(1,10),'movmean',3,'SamplePoints',t) имеет окно, представляющее временной интервал между t(i)-1.5 и t(i)+1.5.

Когда вектор точек выборки имеет тип данных datetime или duration, то длина движущегося окна должна иметь тип duration.

Пример: fillmissing([1 NaN 3 4],'linear','SamplePoints',[1 2.5 3 4])

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

Переменные таблицы для работы, указанные как пара, разделенная запятыми, состоящая из 'DataVariables' и один из вариантов в этой таблице. 'DataVariables' значение указывает переменные входной таблицы для заполнения. Другие переменные в таблице, не указанные 'DataVariables' пройти на выход без работы.

ВыборОписаниеПримеры
Имя переменной

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

'Var1'

"Var1"

Вектор имен переменных

Массив ячеек символьных векторов или строковый массив, где каждый элемент является именем переменной таблицы

{'Var1' 'Var2'}

["Var1" "Var2"]

Скаляр или вектор переменных индексов

Скаляр или вектор индексов табличных переменных

1

[1 3 5]

Логический вектор

Логический вектор, элементы которого соответствуют переменной таблицы, где true включает соответствующую переменную и false исключает его

[true false true]

Дескриптор функции

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

@isnumeric

vartype нижний индекс

Подстрочный индекс таблицы, созданный vartype функция

vartype('numeric')

Пример: fillmissing(T,'linear','DataVariables',["Var1" "Var2" "Var4"])

Отсутствующие параметры значения

свернуть все

Метод обработки конечных точек, указанный как разделенная запятыми пара, состоящая из 'EndValues' и один из 'extrap', 'previous', 'next', 'nearest', 'none'или постоянное скалярное значение. Метод заполнения конечной точки обрабатывает начальные и конечные отсутствующие значения на основе следующих определений:

МетодОписание
'extrap'то же, что и method
'previous'предыдущее не отсутствующее значение
'next'следующее не отсутствующее значение
'nearest'ближайшее не отсутствующее значение
'none'нет значения заливки
скалярпостоянное значение (числовое, duration, и datetime только типы данных)

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | datetime | duration

Известный отсутствующий индикатор, указанный как разделенная запятыми пара, состоящая из 'MissingLocations' и логический вектор, матрица или многомерный массив того же размера, что и A. Элементы индикатора могут быть true для указания отсутствующего значения в соответствующем расположении A или false в противном случае.

Типы данных: logical

Максимальный размер заполняемого промежутка, заданный как числовой скаляр, duration скаляр, или calendarDuration скаляр. Промежутки - это кластеры последовательных отсутствующих значений, размер которых является расстоянием между отсутствующими значениями, окружающими промежуток. Размер зазора вычисляется относительно точек выборки. Зазоры, меньшие или равные максимальному размеру зазора, заполняются, а зазоры, превышающие размер зазора, не заполняются.

Например, рассмотрим вектор y = [25 NaN NaN 100] использование точек образца по умолчанию [1 2 3 4]. Размер зазора в векторе вычисляется по точкам выборки как 4 - 1 = 3, так что MaxGap значение 2 оставляет отсутствующие значения неизменными, в то время как MaxGap значение 3 заполняет отсутствующие значения.

Для отсутствующих значений в начале или конце данных:

  • Одно отсутствующее значение в конце входных данных имеет размер зазора 0 и всегда заполняется.

  • Кластеры отсутствующих значений в начале или конце входных данных не полностью окружены отсутствующими значениями, поэтому размер зазора вычисляется с использованием ближайших существующих точек выборки. Для точек образца по умолчанию 1:N, это приводит к размеру зазора, который на 1 меньше, чем если бы тот же кластер находился в середине данных.

Выходные аргументы

свернуть все

Заполненные данные, возвращаемые в виде вектора, матрицы, многомерного массива, таблицы или расписания. F имеет тот же размер, что и A.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | cell | table | timetable | categorical | datetime | duration | calendarDuration

Индикатор заполненных данных, возвращаемый в виде вектора, матрицы или многомерного массива. TF является логическим массивом, где 1 (true) соответствует записям в F которые были заполнены и 0 (false) соответствует неизмененным записям. TF имеет тот же размер, что и A и F.

Типы данных: logical

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

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