fillmissing

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

Описание

пример

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

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

  • NaN 'double'единственныйдлительность, и calendarDuration

  • NaT datetime

  • <missing> Строка

  • <undefined> категориальный

  • ' ' 'char'

  • {''} ячейка из символьных массивов

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

Типы данных: логический

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

Типы данных: логический

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

Введенный в R2017b