Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

fillmissing

説明

F = fillmissing(A,'constant',v) は、配列または table の欠損エントリを定数値 v で埋めます。A が行列または多次元配列の場合、v はスカラーまたはベクトルのいずれかにすることができます。v がベクトルの場合、各要素は A の対応する列の埋め込み値を指定します。A が table または timetable の場合、v は要素に各 table 変数の埋め込み値が含まれる cell 配列にすることもできます。

欠損値は、A のデータ型にしたがって定義されます。

  • NaNdoublesingleduration および calendarDuration

  • NaTdatetime

  • <missing>string

  • <undefined>categorical

  • ' 'char

  • {''} — 文字配列の cell

A が table の場合、各列のデータ型がその列の欠損値を定義します。

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 には、入力引数 xsts および tq がなければなりません。これらは、長さ gapwindow のサンプル データ xs を含むベクトル、長さ gapwindow のサンプル データ位置 ts を含むベクトル、および欠損データ位置 tq を含むベクトルです。tstq の位置は、サンプル点ベクトルのサブセットです。

F = fillmissing(___,dim) は、動作する対象の A の次元を指定します。既定では、fillmissing はサイズが 1 に等しくない最初の次元に沿って動作します。たとえば、A が行列の場合、fillmissing(A,2)A の列に沿って動作し、1 行ずつ欠損データを埋めます。

F = fillmissing(___,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して、欠損値を埋めるための追加パラメーターを指定します。たとえば、t が時間値のベクトルである場合、fillmissing(A,'linear','SamplePoints',t)t の時間を基準にして A のデータを内挿します。

[F,TF] = fillmissing(___) は、埋められた A のエントリに対応する logical 配列も返します。

すべて折りたたむ

NaN 値を含むベクトルを作成し、各 NaN を前の非欠損値で置き換えます。

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

     1     3     3     4     4     4     5

各列に NaN 値を含む 2 行 2 列の行列を作成します。1 列目で 100、2 列目で 1000 を使用して NaN を埋めます。

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 および logical ベクトル TF を返します。TF の要素の値 1 (true) は、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; 

長さ 10 のウィンドウの移動中央値を使用して ANaN 値を置き換えて、元のデータと埋め込まれたデータの両方をプロットします。

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 のベクトルと、NaN 値を含む対応するデータ A のベクトルを定義します。データをプロットします。

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 に、欠損ギャップの前では 1 つのデータ点を考慮し、ギャップの後ではデータ点を考慮しないように指示します。前の非欠損値がギャップの 10 単位前の位置にあるためです。最初のギャップに対して fillmissing で決定される関数ハンドルの入力値は次のとおりです。

  • xs = 0.3

  • ts = 30

  • tq = [40 50]

2 番目のギャップに対する関数ハンドルの入力値は次のとおりです。

  • 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

欠損エントリを含む行列を作成し、線形内挿を使用して、一度に 1 行ずつ列 (2 番目の次元) を埋めます。各行の先頭および末尾の欠損値は、その行で最も近い非欠損値で埋めます。

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

データ型が異なる table 変数の欠損値を埋めます。

categoricaldouble、および char のデータ型を含む複数の変数をもつ table を作成します。

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   

A 内の変数 Temperature および変数 HumidityNaN 値を 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   

次に、cell 配列に含まれる各 table 変数の指定された定数で 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 と、NaN 値を含むデータ A の対応するベクトルを作成します。

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

最大ギャップ サイズ 250 秒に対応する A の欠損値のみを埋めます。2 番目のギャップは 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

入力引数

すべて折りたたむ

入力データ。ベクトル、行列、多次元配列、table または timetable として指定します。

入力引数が cell 配列である場合、その配列は文字ベクトルの cell 配列でなければなりません。A が timetable である場合は、table 値のみが埋められます。関連付けられた行時間のベクトルに NaT 値または NaN 値が含まれる場合、fillmissing はエラーを生成します。行時間は一意で、昇順にリストされていなければなりません。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | cell | table | timetable | categorical | datetime | duration | calendarDuration

埋め込み定数。スカラー、ベクトル、または cell 配列として指定します。

A が操作次元ごとに異なる埋め込み値を示す行列または多次元配列の場合、v はベクトルにすることができます。v の長さは、操作次元の長さと一致しなければなりません。

A が変数ごとに異なる埋め込み値を示す table または timetable の場合、v は埋め込み値の cell 配列にすることができます。cell 配列内の要素数は、table 内の変数の数と一致しなければなりません。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | cell | categorical | datetime | duration

埋め込みメソッド。次のいずれかとして指定します。

メソッド説明
'previous'前の非欠損値
'next'次の非欠損値
'nearest'最も近い非欠損値
'linear'近傍の非欠損値の線形内挿 (数値、durationdatetime のデータ型のみ)
'spline'区分的 3 次スプライン内挿 (数値、durationdatetime のデータ型のみ)
'pchip'形状維持区分的 3 次スプライン内挿 (数値、durationdatetime のデータ型のみ)
'makima'修正 Akima 3 次エルミート内挿 (数値、durationdatetime のデータ型のみ)

欠損データを埋める移動メソッド。次のいずれかとして指定します。

メソッド説明
'movmean'長さ window のウィンドウの移動平均値 (数値データ型のみ)
'movmedian'長さ window のウィンドウの移動中央値 (数値データ型のみ)

例: @(xs,ts,tq) myfun(xs,ts,tq)

カスタム埋め込みメソッド。関数ハンドルとして指定します。有効な関数ハンドルには、次の 3 つの入力引数が含まれていなければなりません。

入力引数説明
xs埋め込みに使用されるデータ値を含むベクトル。xs の長さは、指定されたウィンドウの長さと一致しなければなりません。
ts埋め込みに使用される値の位置を含むベクトル。ts の長さは、指定されたウィンドウの長さと一致しなければなりません。ts はサンプル点ベクトルのサブセットです。
tq欠損値の位置を含むベクトル。tq はサンプル点ベクトルのサブセットです。

関数は、tq と同じ長さのスカラーまたはベクトルを返さなければなりません。

移動メソッドのウィンドウの長さ。正の整数スカラー、正の整数の 2 要素ベクトル、正の duration スカラーまたは正の duration の 2 要素ベクトルとして指定します。ウィンドウは、サンプル点を基準にして定義されます。

window が正の整数スカラーである場合、ウィンドウは現在の要素を中心にして配置され、window-1 個の隣接する要素を含みます。window が偶数である場合、ウィンドウは現在の要素および直前の要素を中心にして配置されます。window が正の整数の 2 要素ベクトル [b f] である場合、ウィンドウには現在の要素、b 個前までの要素、f 個後までの要素が含まれます。

A が timetable であるか、'SamplePoints'datetime ベクトルまたは duration ベクトルとして指定されている場合、windowduration 型でなければなりません。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration

カスタム埋め込み関数のギャップ ウィンドウの長さ。正の整数スカラー、正の整数の 2 要素ベクトル、正の duration スカラーまたは正の duration の 2 要素ベクトルとして指定します。ギャップ ウィンドウは、サンプル点を基準にして定義されます。

埋め込みメソッドの関数ハンドル fillfun を指定する場合、gapwindow の値は、入力データの欠損値の各ギャップを囲む固定ウィンドウの長さを表します。埋め込み値は、fillfun でそのウィンドウの値を使用して計算されます。たとえば、既定のサンプル点 t = 1:10 とデータ A = [10 20 NaN NaN 50 60 70 NaN 90 100] の場合、ウィンドウの長さ gapwindow = 3 は、fillfun が埋め込み値を計算するために演算を行う最初のウィンドウとして [20 NaN NaN 50] を指定します。fillfun が演算を行う 2 番目のギャップ ウィンドウは [70 NaN 90] です。

A が timetable であるか、'SamplePoints'datetime ベクトルまたは duration ベクトルとして指定されている場合、windowduration 型でなければなりません。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration

演算の対象の次元。正の整数のスカラーとして指定します。値を指定しない場合、既定値は、サイズが 1 ではない最初の配列の次元です。

A が table または timetable の場合、dim はサポートされません。fillmissing は、個々の table または timetable の変数に対して個別に動作します。

2 次元の入力配列 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'}) は、入力テーブルの変数 TemperatureAltitude に対応する列のみを埋めます。
データ オプション

すべて折りたたむ

サンプル点。'SamplePoints' とベクトルで構成されるコンマ区切りのペアとして指定します。サンプル点は A 内のデータの x 軸の位置を表し、並べ替える必要があり、一意の要素を含まなければなりません。サンプル点は等間隔でサンプリングされている必要はありません。既定のサンプル点ベクトルは [1 2 3 ...] です。

メモ

入力データが timetable の場合、この名前と値のペアはサポートされません。timetable では、常に行時間のベクトルをサンプル点として使用します。別のサンプル点を使用するには、目的のサンプル点が行時間に含まれるように 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

演算の対象とする table 変数。'DataVariables' と次の表のいずれかのオプションで構成されるコンマ区切りのペアとして指定します。'DataVariables' の値は、入力 table 内のどの変数を埋めるかを示します。'DataVariables' で指定されていない table 内のその他の変数は、演算されずに出力に渡されます。

オプション説明
変数名

単一の table 変数名を指定する文字ベクトルまたはスカラー string

'Var1'

"Var1"

変数名のベクトル

各要素が table 変数名である、文字ベクトルの cell 配列または string 配列

{'Var1' 'Var2'}

["Var1" "Var2"]

変数インデックスのスカラーまたはベクトル

table 変数インデックスのスカラーまたはベクトル

1

[1 3 5]

logical ベクトル

各要素が table 変数に対応する logical ベクトル。true の場合は対応する変数を含めて、false の場合は対応する変数を除外します。

[true false true]

関数ハンドル

入力として table 変数をとり、logical スカラーを返す関数ハンドル

@isnumeric

vartype 添字

関数 vartype によって生成される table の添字

vartype('numeric')

例: fillmissing(T,'linear','DataVariables',["Var1" "Var2" "Var4"])

欠損値オプション

すべて折りたたむ

端点の処理メソッド。'EndValues' と、'extrap''previous''next''nearest''none' のいずれかで構成されるコンマ区切りのペアまたは定数スカラー値として指定します。端点埋め込みメソッドは、以下の定義に基づいて、先頭および末尾の欠損値を処理します。

メソッド説明
'extrap'method と同じ
'previous'前の非欠損値
'next'次の非欠損値
'nearest'最も近い非欠損値
'none'埋め込み値なし
スカラー定数値 (数値、durationdatetime のデータ型のみ)

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | datetime | duration

既知の欠損インジケーター。'MissingLocations'、および A と同じサイズの logical ベクトル、行列、または多次元配列で構成されるコンマ区切りのペアとして指定します。インジケーターの要素は、A の対応する位置にある欠損値を示す true、またはそれ以外の false にすることができます。

データ型: logical

埋められる最大ギャップ サイズ。数値スカラー、duration スカラー、または calendarDuration スカラーとして指定します。ギャップは、そのサイズがギャップ周囲の非欠損値間の距離である連続欠損値のクラスターです。ギャップ サイズはサンプル点を基準にして計算されます。最大ギャップ サイズ以下のギャップが埋められ、ギャップ サイズより大きいギャップは埋められません。

たとえば、既定のサンプル点 [1 2 3 4] を使用したベクトル y = [25 NaN NaN 100] について考えます。ベクトルのギャップ サイズはサンプル点から 4 - 1 = 3 として計算されるため、2MaxGap 値は欠損値を変更せずに残しますが、3MaxGap 値は欠損値を埋めます。

データの先頭または末尾に欠損値がある場合、次のようになります。

  • 入力データの末尾にある単一欠損値のギャップ サイズは 0 であり、常に埋められます。

  • 入力データの先頭または末尾で発生する欠損値のクラスターは完全には非欠損値で囲まれないため、ギャップ サイズは最も近い既存のサンプル点を使用して計算されます。既定のサンプル点 1:N の場合、同じクラスターがデータの中央で発生した場合よりも 1 つ小さいギャップ サイズが生成されます。

出力引数

すべて折りたたむ

埋め込まれたデータ。ベクトル、行列、多次元配列、table または timetable として返されます。FA と同じサイズです。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | cell | table | timetable | categorical | datetime | duration | calendarDuration

埋め込まれたデータのインジケーター。ベクトル、行列または多次元配列として返されます。TF は logical 配列であり、1 (true) は埋め込まれた F の要素に対応し、0 (false) は未変更の要素に対応します。TFA および F と同じサイズです。

データ型: logical

拡張機能

R2016b で導入