我正在挖掘一个大的 dt(70k cols,字符)。 大多数列都有广泛的值,但其中相当一部分只有两个令人讨厌的值。 我想识别所有这些列然后转储它们。
有什么建议吗?
这些令人讨厌的列将仅包含术语“**skipped**”或“dne”。
我已经转储了包含单个记录值的所有列。

这是一个示例脚本
Names Default To Here( 1 );
// Create a sample data table to be used for illustration
dt = New Table( "Example", add rows( 20 ) );
dt << delete columns( :Column 1 );
For( i = 1, i <= 100, i++,
If( randomuniform( 0, 1 ) > .95,
If( Random Uniform( 0, 1 ) > .5,
dt << New Column( "col" || Char( i ),
character,
values( {"**skipped**"} )
),
dt << New Column( "col" || Char( i ),
character,
values( {"dne"} )
)
),
dt << New Column( "col" || Char( i ),
character,
set each value( Char( Random Uniform( 0, 100 ) ) )
)
)
);
// Below is the simple script that will build a list of columns to be deleted,
// and then delete them
colNames = dt << get column names(string,character);
colsToDelete = {};
For Each( {name}, colnames,
If(
N Rows(
(dt << get rows where(
as Column( name ) == "**skipped**" | As Column( name ) ==
"dne"
))
),
Insert Into( colsToDelete, name )
)
);
dt << delete columns( colsToDelete );根据您的数据和所需的速度,您可能想要更改获取唯一值列表的方式,但以下是一种选择
Names Default To Here(1);
dt = New Table("Untitled 4",
Add Rows(3),
Compress File When Saved(1),
New Column("Column 1", Character, "Nominal", Set Values({"dne", "**skipped**", "**skipped**"})),
New Column("Column 2", Character, "Nominal", Set Values({"dne", "a", "b"})),
New Column("Column 3", Character, "Nominal", Set Values({"**skipped**", "c", "d"})),
New Column("Column 4", Character, "Nominal", Set Values({"dne", "dne", "**skipped**"}))
);
aa_colmask = ["dne" => 1, "**skipped**" => 1]; // we don't need the values, just keys
cols_to_remove = {};
For Each({colname}, dt << Get Column Names("String"),
// depending on how much data you have, you might want to use different unique value techniques
// Summarize, Associative Array and Summary are few options.
// You can also first check if there are exactly 2 unique values, then check those
aa_values = Associative Array(Column(dt, colname)); // I use AA here as it is the easiest option (not fastest!)
aa_values << Remove(aa_colmask);
If(N Items(aa_values) == 0,
Insert Into(cols_to_remove, colname);
);
);
dt << Delete Columns(cols_to_remove);