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

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

свернуть все

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

Когда входной параметр является массивом ячеек, это должен быть массив ячеек с векторами символов. Если 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'модифицированная кубическая эрмитова интерполяция Акима (число, 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. В Timetables всегда используется вектор времени строки в качестве точек выборки. Чтобы использовать различные точки выборки, необходимо отредактировать расписание так, чтобы время в строке содержало требуемые точки выборки.

Движущиеся окна заданы относительно точек выборки. Для примера, если 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' и один из опций в этой таблице. The '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 меньше, чем если бы тот же кластер произошел в середине данных.

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

свернуть все

Заполненные данные, возвращенные в виде вектора, матрицы, многомерного массива, таблицы или timetable. 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