保持列匹配列表,刪除其餘列你好 -
我想從數據表中刪除列(基於列名)不是匹配一個列表。 到目前為止,我一直在關注 JSL 代碼,但它不起作用。
輸入讚賞。
Names Default To Here( 1 );
bigClass = Open( "$SAMPLE_DATA/Big Class.JMP" );
dt = Current Data Table();
col_of_interest = {"name", "age", "weight"};
col_names = dt << Get Column Names( String );
For(j = 1, j <= N Items( col_of_interest ), j++,
For( i = N Items( col_names ), i > 0, i--,
if ( not( col_names[i] == col_of_interest[j],
Remove From( col_names, i ))
);
);
);
dtNew = dt << subset( all rows, columns( col_names ) ); Wait( 0 );
腳本編寫視窗回复:保持列匹配列表,刪除其餘列我會遍歷數據表中的所有列並在需要時刪除(如果你想堅持你的想法,我也可以幫助調試):
Names Default To Here(1);
bigClass = Open("$SAMPLE_DATA/Big Class.JMP");
dt = Current Data Table();
col_of_interest = {"name", "age", "weight"};
col_names = dt << Get Column Names(String);
For(i = 1, i <= N Items(col_names), i++,
If(!Contains(col_of_interest, col_names[i]),
dt << Delete Columns(col_names[i]);
);
);
Wait(0);另外我建議不要使用 J 作為變量名,因為 JMP 有一個矩陣函數 J()。
編輯:
也沒有必要使用 Current Data Table() (你不應該),因為你在打開表格後已經有了參考。 這也是我刪除列的首選方法(使用關聯數組僅獲取額外的列並刪除它們):
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.JMP");
col_of_interest = {"name", "age", "weight"};
//get columns which are "extra"
col_names_aa = Associative Array(dt << Get Column Names(String));
col_names_aa << Remove(Associative Array(col_of_interest));
col_names_to_remove = col_names_aa << get keys;
Show(col_names_to_remove);
dt << Delete Columns(col_names_to_remove);回复:保持列匹配列表,刪除其餘列在比較兩個列表時,我發現製作第三個列表更容易在循環中包含結果,然後在所有循環完成後使用第三個列表執行操作。下面的代碼可以完成您正在嘗試的操作。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.JMP" );
col_of_interest = {"name", "age", "weight"};
col_names = dt << Get Column Names( String );
col_list = {};
For( i = N Items( col_names ), i > 0, i--,
if(contains(col_of_interest, col_names[i]),
insert into(col_list, col_names[i])
);
);
dtNew = dt << subset( all rows, columns( col_list ) );
Wait( 0 );