欠損値のみを含む列を削除するスクリプトはありますか?私はデータテーブルをクリーンアップする方法につまずいています。これは、このプロセスを自動化するのに非常に役立ちます。
おかげで、
ピート
私はあまりにも早く話しました(入力しました)。マトリックス(データテーブル)が少し大きくなると、最初の方法の方が速くなります。100,000行x 1000列の行列では、最初の方法は2.48秒かかり、2番目の方法は6.51秒かかります。私の推測では、真に大きなテーブルの場合、最初の方法は単に遅いのに対し、2番目の方法は非常に遅くなります。
乾杯、
ブレイディ
ちょっとピート、私はこれについて後で考えました... 私が提案した最初の方法よりもはるかに高速です。たとえば、1000行x1000列のテーブルでは、最初の方法では0.82秒かかりましたが、この方法では0.017秒かかりました。
dt << Delete Columns( Loc( V Max( Is Missing( dt << Get All Columns As Matrix ) ) ) );
しゅうの方がおそらく良いかもしれませんが、数値列と文字列にAll()およびLoc()関数を使用することにしました。
このようなもの:
dt=New Table( "untitled 25 2",
Add Rows( 4 ),
New Column( "Column 1",
Character,
"Nominal",
Set Values( {"a", "a", "a", "a"} )
),
New Column( "Column 2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [., ., ., .] )
),
New Column( "Column 3", Character, "Nominal", Set Values( {"", "", "", ""} ) ),
New Column( "Column 4",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [., 0, 0, 0] )
)
);
For( i = N Cols( dt ), i > 0, i--,
vals = Column( dt, i ) << get values;
show(vals);
If( (Column( dt, i ) << get data type) == "Character",
Show( Loc( vals, "" ) ),
Show( all( vals ) )
);
);
ピート、列を削除したい場合(投稿の主題は欠落をゼロに置き換えると言う)、これはそれを行います。
dt = current data table();
For( i = N Col( dt ), i >= 1, i--,
If( Max( Is Missing( dt[0, i] ) ) > 0,
dt << Delete Columns( i )
)
);
マイク、ありがとう
これをスクリプト化する方法を知っていますか?私は同様の解決策を見つけましたが、これをスクリプトに完全に含める方法を見つけることができませんでした。