script pour sélectionner toutes les colonnes contenant une liste de valeurs ?J'ai un gros dt (70 000 couleurs, caractère) que je fouille. La plupart des cols ont une large gamme de valeurs, mais une population notable d'entre eux n'a que deux valeurs de nuisance. Je veux identifier tous ces cols et ensuite les vider.
Aucun conseil?
Ces colonnes nuisibles contiendront UNIQUEMENT les termes "**skiped**" ou "dne".
J'ai déjà vidé toutes les colonnes contenant une seule valeur d'enregistrement.

Automatisation et scriptsRe : script pour sélectionner toutes les colonnes contenant une liste de valeurs ?Voici un exemple de script
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 );Re : script pour sélectionner toutes les colonnes contenant une liste de valeurs ?En fonction de vos données et de la vitesse dont vous avez besoin, vous souhaiterez peut-être modifier la façon dont vous obtenez la liste des valeurs uniques, mais vous trouverez ci-dessous une option
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);