保持列匹配列表,删除其余列你好 -
我想从数据表中删除列(基于列名)不是匹配一个列表。 到目前为止,我一直在关注 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 );
回复:保持列匹配列表,删除其余列感谢您提供有关矩阵函数 J, jthi 的输入和提示。 让我重试。