嗨,JMP团队,
是否可以通过仅对选定列的子集进行排序来增强“列重新排序”命令?
谢谢,
TS
抱歉,我没有意识到这个对话还在继续,我今天才回到社区网站。
我同意所做的事情。
谢谢,
拍
加载项已发布到社区的文件交换/加载项,并处于等待审核状态(自 2022 年 1 月 15 日起)。
您还应该能够从此处获取加载项GitHub - 订购选定的列通过下载 JMP-Tools Order Selected Columns.jmpaddin 文件并安装它。
插件现在应该准备好了。 在完成更多测试后,我将尝试在今天或周末使用插件将帖子创建到 JMP 社区的讨论区。
安装后,新的子菜单将添加到加载项菜单(它可以添加到列菜单,但即使让它作为插件工作现在也足够工作和麻烦了)。
加载项菜单:

设置窗口:

可以添加的可能的东西:
- 更多排序选项(与 JMP 已经提供的一样)
- 添加工具栏
- 移动到列菜单
- 重构代码,因为它在实现选项后变得混乱
- 更好地管理以前的列顺序
- 结合保存当前列顺序和分组?
好吧,我会尝试弄清楚如何为该插件添加一些简单的“设置”菜单,因为我认为在启动脚本时打开菜单有点不必要。
可以建立这样的菜单,但我不确定是否有必要:

它确实已经支持这些选项,但用户必须在插件内的 settings.json 文件中进行修改,这就是为什么它需要一些小的 UI 来进行更改。
@jthi ,
非常感谢您将出色的技能应用于这个问题。
关于选定列的列重新排序行为,我建议默认设置是重新排序和重新组合已排序的列,并且可以选择将重新排序的列保留在原位。
最好的,
TS
我同意这一点,如果没有选择任何列 -> 当前功能则使用选定的列。
您认为应该如何对选定的列进行列排序? 应该只使用选定的列进行排序,还是应该将除第一个选定列之外的所有列一起移动(我已经编写了代码,但我必须对其进行测试)。 几张图片来解释我在问什么:
开局情况:

仅在选定列内按名称排序:

将它们组合在一起时进行排序:

@jthi ,谢谢你的代码!我会用它。
我想我们都同意这应该是 JMP 的基本功能。“Cols -> Reorder Cols -> Reorder By Name”的工作方式类似于选择重复行等其他功能,如果没有选择任何列,JMP 会找到所有列都相同的重复行。但如果选择了列,JMP 只会在这些列中查找重复行。
@pcarroll1如果您希望始终按字母顺序对组中的列进行排序,您应该能够编写脚本。
由于使用 For Each,此脚本需要 JMP16。 它应该在组内按字母顺序对数据表中所有组中的列进行排序(如果您只想重新排序特定组,您可以为要重新排序的组添加选择)
Names Default To Here(1);
//Alphabetically order columns in groups JMP16
dt = Current Data Table();
col_groups = dt << Get Column Groups Names("String");
col_list = dt << Get Column Names("String");
For Each({col_group}, col_groups,
cols_in_group = dt << get column group(col_group);
//get index of first column in group
index_of_first = Contains(col_list, cols_in_group[1] << get name);
ordered_cols_in_group = Sort List(cols_in_group);
//fix indices
ordered_cols_in_group = ordered_cols_in_group;
dt << Move Selected Columns(ordered_cols_in_group, After(Column(dt, index_of_first)));
);前:

后:

例如表的脚本:
New Table("Untitled 3",
Add Rows(0),
New Column("a", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("b", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("x", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("a 2", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("c", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("b 2", Numeric, "Continuous", Format("Best", 12), Set Values([]), Set Display Width(82)),
New Column("z", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("a 3", Numeric, "Continuous", Format("Best", 12), Set Values([])),
New Column("x 2", Numeric, "Continuous", Format("Best", 12), Set Values([])),
Group Columns(:x, 4),
Group Columns(:z, 3)
)创建一个插件应该相当容易,它应该能够执行此愿望列表项中要求的操作,当然最好将其包含在 JMP 中。
我想这样做已经有一段时间了。在组内按字母顺序重新排列列会很有帮助。有时我将新列添加到列组,但随后发现它们成为一个问题,因为名称不再排序,除非我手动执行。