是否有人有脚本删除仅包含缺失值的列?我在清理数据表时遇到了麻烦,这对于自动化此过程非常有帮助。
谢谢,
皮特
我说的太早了。一旦矩阵(数据表)变大,第一种方法就会更快。在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 )
)
);
谢谢迈克,
您知道编写脚本的方法吗?我想到了类似的解决方案,但是找不到将其完全包含在脚本中的方法。