如果只有一个值,没有字符串变体,则删除 CHAR 列想知道如何编写脚本来查看所有列,看是否至少有 2 个不同的值并删除所有单值列?我有数千个“特征”列,都是字符类型,但其中相当一部分只有一个记录……又名分布级别 = 1。
如何检测并删除 1 条记录?
自动化和脚本回复:如果只有一个值,没有字符串变体,则删除 CHAR 列这是一个简单的小脚本,它查找所有字符列,然后从列表末尾到开头,如果只找到一个不计算空格的值,则删除该列
Names Default To Here( 1 );
dt = Current Data Table();
charCols = dt << get column names( string, character );
For( i = N Items( charCols ), i >= 1, i--,
Summarize( dt, bygroup = by( As Column( charCols[i] ) ) );
If( bygroup[1] == "",
Remove From( bygroup, 1, 1 )
);
If( N Items( bygroup ) <= 1,
dt << delete columns( Column( dt, charCols[i] ) )
);
);
回复:如果只有一个值,没有字符串变体,则删除 CHAR 列与 Jim 的想法类似(使用汇总来获取唯一值,然后删除缺失值(如果有的话))但略有不同:使用过滤器每个来找到要删除的列,然后使用删除列同时将它们全部删除。
Names Default To Here(1);
dt = Current Data Table();
char_cols = dt << get column names(Character, String);
cols_to_remove = Filter Each({colname}, char_cols,
Summarize(dt, uniq = by(Column(dt, colname)));
Remove From(uniq, Contains(uniq, "")); // to remove missing values from list
N Items(uniq) == 1;
);
dt << Delete Columns(cols_to_remove);回复:如果只有一个值,没有字符串变体,则删除 CHAR 列需要注意的一点是:我和 Jim 都从唯一值列表中删除了缺失值。根据您的数据/模型/用例,您可能希望(或必须)将其视为单独的值,因此请考虑到这一点。我们的两个脚本都可以考虑到这一点,但它们确实需要进行一些小的更改。