如果只有一個值,沒有字串變化,則刪除 CHAR cols想知道如何編寫腳本來查看所有列以查看是否至少有 2 個不同的值並刪除所有單值列?我有數千個「特徵」列,全部都是字元類型,但其中相當多的列中只有一筆記錄......也就是分佈層級 = 1。
如何偵測並刪除1筆記錄列?
自動化和腳本編寫回覆:如果只有單一值,沒有字串變化,則刪除 CHAR cols這是一個簡單的小腳本,它會尋找所有字元列,然後從列表末尾到開頭,如果只找到一個不計算空格的值,則刪除該列
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 cols與 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 cols需要注意的一件事:我和吉姆都從我們的唯一值清單中刪除了缺失值。根據您的資料/模型/用例,您可能希望(或必須)將其視為單獨的值,因此請考慮這一點。我們的兩個腳本都可以考慮到這一點,但它們確實需要進行一些小的更改。