こんにちは!
私は自分のデータセットの中の14の井戸からの様々な岩石物理的な井戸ログデータを使って作業しています。ロギングデータには、異なる間隔で識別された欠損値があります。これらの値をさまざまな方法で解釈して、どの手法が最適かを確認したいと思います。データが存在する1つの変数からデータが存在しない別の変数への代入を同じ方法で実装するために、[欠損値の検索]パネルを使用しています(例: ガンマ線データは50フィート間隔で井戸にはありませんが、密度データは存在します。しかし、あるロギング変数をあるロギング変数を使用して、同じロギング変数内の欠損値を代入するが、別の近くの別のウェルでその変数を代入したい場合はどうなりますか。たとえば、深さ4000-6000フィートのある井戸にガンマ線データがあり、深さ5000-5800フィートの近くにある別の井戸にガンマ線がない場合、同じ変数(同じ列)を使用して値を入れ替えることができます。XY座標が違いますか?ありがとうございます。
メラニー
以下は、欠損値のあるウェルヘッドを囲むウェルヘッドを取り、その値を平均し、欠損値のあるウェルヘッドを平均値に設定して、ウェルヘッドの値を計算する例です。
Names Default To Here( 1 );
// Create a new table to use
dt = New Table( "Untitled 7",
Add Rows( 2500 ),
New Column( "x", Numeric, "Continuous", Format( "Best", 12 ), Set Display Width( 42 ) ),
New Column( "y", Numeric, "Continuous", Format( "Best", 12 ), Set Display Width( 83 ) ),
New Column( "data", Numeric, "Continuous", Format( "Best", 12 ), )
);
// Populate the data, leaving 2% missing data
theRow = 0;
For( i = 1, i <= 50, i++,
For( k = 1, k <= 50, k++,
theRow = theRow + 1;
:x[theRow] = i;
:y[theRow] = k;
If( Random Integer( 0, 100 ) <= 98,
:data[theRow] = Random Uniform( 800, 1000 ),
:data[theRow] = .;
write("\!nMissing value for row ", therow)
);
)
);
// Impute missing values by averaging the well heads around the missing value
For( theRow = 1, theRow <= N Rows( dt ), theRow++,
If( Is Missing( :data[theRow] ) == 1,
minX = :x[theRow] - 1;
If( minX < 1, minX = 1 );
maxX = :x[theRow] + 1;
If( maxX > 50, maxX = 50 );
minY = :y[theRow] - 1;
If( minY < 1, minY = 1 );
maxY = :y[theRow] + 1;
If( maxY > 50, maxY = 50 );
impute = 0;
count = 0;
For( i = minX, i <= maxX, i++,
For( k = minY, k <= maxY, k++,
theValue = dt:data[dt << get rows where( dt:x == i & dt:y == k )][1];
If( Is Missing( theValue ) == 0,
count
++);
impute = Sum( impute, theValue );
)
);
:Data[theRow] = impute / count;
)
);返信いただきありがとうございます!私はこれを試します。