是否有人有腳本刪除僅包含缺失值的列?我在清理數據表時遇到了麻煩,這對於自動化此過程非常有幫助。
謝謝,
皮特
我說的太早了。一旦矩陣(數據表)變大,第一種方法就會更快。在100,000行x 1000 col矩陣上,第一種方法需要2.48秒,而第二種方法需要6.51秒。我的猜測是,對於真正的大表,第一種方法只會很慢,而第二種方法會非常麻煩。
乾杯,
布雷迪
嘿,皮特,我後來想到了... 它比我提出的第一種方法快得多。例如,在1000行x1000列的表上,第一種方法花費了0.82秒,而該方法花費了0.017秒。
dt << Delete Columns( Loc( V Max( Is Missing( dt << Get All Columns As Matrix ) ) ) );
@brady_brady 的可能更好,但我想出了對數字和字符列使用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 )
)
);
謝謝邁克,
您知道編寫腳本的方法嗎?我想到了類似的解決方案,但是找不到將其完全包含在腳本中的方法。