安装插件,然后从主菜单启动:表 > 动态子集


目的:
此加载项创建动态子集,它是打开的数据表的可筛选视图,因此您只能查看满足指定条件的行和列。
视频示例:
使用说明:
- 首先下载,然后打开加载项将新菜单项“动态子集”安装到您的表格菜单中。
- 数据表已打开后,选择菜单项“表”>“动态子集”。 将打开一个新窗口,其中包含原始表格的链接子集,包括右侧的两个大纲框,列过滤器和数据过滤器。
- 这列筛选大纲框允许您选择希望在动态子集中看到哪些列。
- 这数据过滤器大纲框包含 JMP 数据过滤器,您可以在其中指定数据必须满足的条件才能显示在动态子集中。
- 要使用列过滤器,选择您希望在动态子集中看到的列。 打清除,或取消选择所有列以显示动态子集中的所有可用列。
- 要使用数据过滤器,选择要过滤的一个或多个列,然后单击加号。 然后,在结果选择区域中选择您的数据必须满足哪些条件才能包含在动态子集中。 有关使用 JMP 数据过滤器的更多详细信息,请参阅此示例视频 (使用本地数据过滤器),或者在JMP 文档。
- 做出选择后,您可以像往常一样在动态子集上使用 JMP 平台,并且只有您选择的行和列才可用并用于分析。
- 通过选择“过滤器”>“将视图保存到数据表”旁边的红色三角形来保存视图。 这会将脚本保存到数据表中,其中包含重新创建动态子集所需的信息。 您可以从现有动态子集内部应用此视图,或者如果尚未打开任何动态子集,则可以直接从表启动。
使用注意事项:
- 如果您首先在原始表格中选择列,然后选择“加载项”>“动态子集”,则所选列将自动添加为可过滤条件数据过滤器部分。
- 动态子集是原始表的链接子集,因此您在动态子集中所做的选择将选择原始表中的相应行。
- 默认情况下,动态子集是锁定的。 要解锁,请选择表名称旁边的红色三角形,然后取消选中“锁定数据表”。

请注意,与 JMP 中任何链接子集的情况一样,许多您在动态子集中所做的更改不会影响原始表,例如创建新列。 更改单元格和列属性中的数据将要影响你原来的表。 任何您对列或数据过滤器所做的调整会将表格恢复为原始表格。
- 你可以在没有打开表的情况下选择“表”>“动态子集”,您将提示选择一张桌子。 在这种情况下,默认情况下原始表在视图中隐藏,但可以通过选择菜单项“窗口”>“隐藏”下的表来显示。
啊,是的,我想我可能知道发生了什么事。 当我有时间的时候,我会启动我的虚拟机,看看是否可以在 Windows 上的项目中运行它。 我还发现,即使在 Mac 上,情况也不能完美运行,因为数据过滤器的轮廓框消失了。 感谢您让我知道该缺陷!
@朱利安当我在 Windows 中尝试时收到以下错误消息
你好@斯布雷尔,
谢谢你让我知道! 我对此进行了研究,至少在 Mac 上,我可以确认,除非您在过滤器上进行某种选择,否则数据表不会出现。 一旦你这样做了,事情似乎就会按预期进行。 那对你有用吗? 我还不确定为什么会发生这种情况,但在开发下一个版本时需要研究它。

@朱利安不确定您是否意识到这一点,但这个插件似乎无法在项目上下文中工作。
感谢您的所有反馈, @jthi ! 出色的建议。 当我可以腾出时间进行下一次迭代时,我肯定会尝试合并其中的一些内容。
@xxvvcczz该代码似乎使用 For Each,因此至少需要 JMP16(也基于 addin.def 文件 minJmpVersion=16)。
@朱利安刚刚开始使用这个插件,但它似乎是 JMP 的一个很好的补充。 我想到了一些建议,这些建议可能值得在未来的版本中考虑:
- 向菜单项添加信息,表明这是一个加载项。 当有人想知道我的动态子集菜单项在哪里时,可能会防止将来出现混乱(例如,我已经这样做了对选定的列进行排序当我将其添加到“列”菜单时)
- 启用窗口的工具栏。 如果您可以强制工具栏与数据表中使用的工具栏相同,那就更好了,但我不确定这是否可能(也许是一个愿望清单项)。 这将使直接从过滤的数据表启动用户最喜欢的分析变得非常快速(比在菜单中查找它们更快)。
- 如果它适合某个地方,请添加原始表有多少行的计数。
我确实注意到了一些“问题”:
- 如果我要调整动态表的大小,然后过滤 -> 我的表有时会返回到原始大小。 当旧框被删除并添加新框时,很可能会触发此操作。 (在 Windows 10 上使用 JMP16)。
- 由于 IsEmpty({}) 是 0 而不是 1,初始化的 selectedColumns 的比较无法按预期进行。 N Items() > 0 应该可以工作。
- 当使用过滤后的数据创建新的子集时,我认为最好避免使用 << Select Rows(rowsSelected) ,然后使用选定的行进行子集化,因为这将导致对原始表进行“不必要的”选择(这将导致速度减慢)。 相反,可以使用 Rows(selectedRows) 来完成子集化。 这也可能允许您删除一些<<清除选择。
我也认为可以做些什么@斯布雷尔是建议(如果我理解正确的话),但它需要相当多的脚本编写,并且当前的一些代码很可能需要重写。 我的建议是添加一些控件(尽管这个解决方案很容易引起一些混乱):
- 复选框/单选框将允许用户使用摘要而不是直接的表子集。 摘要表将基于所选的过滤器列。 这也可以“隐藏”在大纲框中,但我认为最好向用户显示当前正在使用哪个选项。
- 当用户找到他/她想要修改的值时,可以选择该值。 这还将选择原始表中的同一行(并且我们知道动态子集 << 获取选定列中的列)。 然后用户可以按下一个按钮,打开一个窗口,允许用户更改该值。
- 值更改后重新运行动态子集以更新它
嗨塞巴斯蒂安,
我很高兴我完全理解您面临的挑战! 这是一个有趣的问题,我对它的思考越多,我就越能想象通过汇总表或子集表来实现这一点的有用方法。 我绝对会牢记这一点,以防万一发生一些变化,使之成为可能。
朱利安
你好@朱利安你的视频完美地描述了我设想的问题。我希望能够在动态过滤器子集表中应用修复,但正如您所说,这是不可能的。
尽管如此,这是我经常依赖的一个很棒的工具。
多谢
塞巴斯蒂安
你好@斯布雷尔,
我想我更好地理解你在追求什么。 我认为我们无法完全实现它,因为链接子集处理更改值的方式(我无法编写脚本,以便汇总表中更改的值将更改原始表中的所有这些值)。 但是,我认为您可以在这里做一些事情,即首先制作一个汇总表,然后在其上使用动态子集来追踪异常值。 这是一个使用示例数据集的非常人为的示例,我这样做是为了跟踪我希望更改的行,然后导航回原始表以更改这些值。 也许这样的东西适合你的情况?
@朱利安Fit X by Y 在重新编码和/或非常大的列表(>100 行)的上下文中没有用。 当已经选择了多个列时,是否可以选择在链接到原始表的同时对所选列运行汇总,然后在生成的汇总表上显示动态过滤器? 我尝试了这种方式,但尽管禁用了“锁定数据表”选项,但它似乎不允许修改结果表。
@斯布雷尔:我确实认为我理解您要在那里做什么,并且我可以看到使用更大的表来追踪事情可能会变得复杂。 我不确定我能否想出一种简单的方法来调整此加载项来完成此类事情。 但是,我想知道像 Fit Y by X 甚至 Graph Builder 这样的平台是否有助于检测两个分类变量交叉处发生的异常水平。 例如,马赛克图可以很好地显示独特的交叉点,并且当有不合适的东西时,视觉上会很明显。 例如,在您的示例中:

@朱利安我想到的是某种可用于“相对”重新编码的动态摘要过滤。 例如,您可能有一个大表,但您可能只对几列感兴趣。 在这些列中,当使用为您提供动态子集的当前版本时,您可能会出现许多冗余术语。
仅查看选定的一组列的唯一术语的选项将使修改变得更容易,同时密切关注术语之间的关系,这是使用重新编码功能时无法轻松完成的事情。
我附上了一个示例表,其中将使用您的插件检查类型 1 和类型 2 列。 有一个术语是错误的。 在与动态过滤相结合的摘要场景中,更容易识别错误并修复它。
New Table( "veggies",
Add Rows( 18 ),
New Column( "Column 1",
Character,
"Nominal",
Set Values(
{"a", "b", "c", "d", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
"n", "o", "p", "q"}
)
),
New Column( "Type 1",
Character,
"Nominal",
Set Selected,
Set Values(
{"tomatoes", "tomatoes", "tomatoes", "apple", "apple", "apple",
"carrots", "carrots", "carrots", "tomatoes", "tomatoes", "tomatoes",
"apple", "apple", "apple", "carrots", "carrots", "carrots"}
)
),
New Column( "type 2",
Character,
"Nominal",
Color Cells( {69, {17}} ),
Set Selected,
Set Values(
{"red", "green", "green", "red", "green", "red", "red", "red", "green",
"red", "green", "green", "red", "green", "red", "red", "blue", "green"}
),
Set Display Width( 55 )
)
)
@FN :按照现在的写法,表中选择的行不可能影响附加到过滤器的直方图,但也许我们可以采取相反的方式。
我认为有两种方法可以查看直方图。 第一个是打开表格上的摘要图。 为此,请选择“过滤器”旁边的红色三角形,然后选择“切换摘要图”。 现在,当您更改过滤器时,您将看到每列的直方图更新。

另一种选择是让你的过滤器有条件。 您可以通过选择“数据过滤器”旁边的红色三角形,然后选择条件来执行此操作:

通过这样做,一旦设置了过滤器,其余过滤器仅显示先前过滤器定义的子集中剩余的值。
我希望这有帮助!
@斯布雷尔: 你能告诉我更多关于你在那里的想象吗? 如果您的目标是对数据进行一些汇总并希望动态过滤它,您可以使用“分析”>“制表”来实现此目的,然后在设置制表后,添加本地数据过滤器,您可以从红色三角 > 本地数据过滤器访问。 通过这种方式,您可以动态过滤列表并查看这些汇总统计信息根据您定义的子集而变化。
很不错。
显示动态数据过滤器也有用吗? 分布应随行选择而变化。 也许有一个按钮允许用户手动优化这些?
非常酷的工具。 特别是,这对于在取消选择“锁定数据表”功能时需要了解相关列的内容的重新编码非常有用。
在那些条件下。 如果还有一种方法(1)代替子集,能够像目前的情况那样进行汇总和动态过滤,并且(2)能够捕获脚本中的更改,那将非常有帮助。