cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Choose Language Hide Translation Bar
gallardet
Level III

Delete all columns that have zeros in all raws

Well, that is what I need to do.

I tried to look for similar scripts but I have not found the solution.

Thanks in advance.

 

Manel

1 ACCEPTED SOLUTION

Accepted Solutions
txnelson
Super User

Re: Delete all columns that have zeros in all raws

Here is a simple script that will delete all columns that are all zeros

Names Default To Here( 1 );
dt = Current Data Table();

numericColNames = dt << get column names( string, numeric );

allZerosList = {};

For( i = 1, i <= N Items( numericColNames ), i++,
	If( Col Sum( Column( dt, numericColNames[i] ) ) == 0
	& Col Std Dev( Column( dt, numericColNames[i] ) ) == 0,
		Insert Into( allZerosList, numericColNames[i] )
	)
);

If( N Items( allZerosList ) > 0,
	dt << delete columns( allZerosList )
); 
Jim

View solution in original post

5 REPLIES 5
ron_horne
Super User (Alumni)

Re: Delete all columns that have zeros in all raws

txnelson
Super User

Re: Delete all columns that have zeros in all raws

Here is a simple script that will delete all columns that are all zeros

Names Default To Here( 1 );
dt = Current Data Table();

numericColNames = dt << get column names( string, numeric );

allZerosList = {};

For( i = 1, i <= N Items( numericColNames ), i++,
	If( Col Sum( Column( dt, numericColNames[i] ) ) == 0
	& Col Std Dev( Column( dt, numericColNames[i] ) ) == 0,
		Insert Into( allZerosList, numericColNames[i] )
	)
);

If( N Items( allZerosList ) > 0,
	dt << delete columns( allZerosList )
); 
Jim
gallardet
Level III

Re: Delete all columns that have zeros in all raws

Thanks, Sir.
TRR21
Level III

Re: Delete all columns that have zeros in all raws

Can this be tweaked such that I can remove columns that have mostly zeros (eg. 50% of more of the rows)?

Thanks.
txnelson
Super User

Re: Delete all columns that have zeros in all raws

You could do something like:

If(
	N Rows( dt << get rows where( Column( dt, numericColNames[i] ) == 0 ) ) >
	N Rows( dt ) / 2,
	Insert Into( allZerosList, numericColNames[i] )
);
Jim