根据正则表达式选择堆叠列<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我不断堆叠数百列,这些列具有共同的前缀并以不同的数字或后缀结尾。
我想做的是编写一个脚本来:
- 根据正则表达式模式查找列,例如“BLUE_CARS_*_\d{1,2}”、“HOMES_(SINGLE|DOUBLE)_WIDE”等。
- 选择那些列
- 堆叠列(并放置在新的数据表中)
对于我的生活,我无法找到(或 Google 正确搜索)如何将正则表达式用于列选择。
我考虑过按数据类型选择列,但存在共享该数据类型的其他列,而不是
提到我想要更灵活的东西。
任何建议或代码片段将不胜感激,并在此先感谢您。
回复:基于正则表达式选择的堆栈列show() 和有关发生的事情的详细信息帮助我看到我们实际上是在告诉它使用列名,而不是实际的列——我认为这是有道理的,因为 nc = dt << get column names;< /code> 首先被使用。 所以,而不是
<代码>cname = nc <<获取名字;
我们需要
<代码>cname = column(nc ) << 获取名称;
我想默认情况下 get column names() 返回字符串,而不是列列表。 啊,好吧,它现在按预期工作。
感谢您的帮助!
回复:基于正则表达式选择的堆栈列显示(我,数控);
将显示两个变量的当前值。在循环中的“i++”增量之后将其插入。nc *应该* 显示为列名列表(在花括号中)。在这种情况下,<
使用 show 命令运行它后检查日志,看看有什么问题。
JMP 中的脚本化对象是理解消息的对象。变量可以包含矩阵、列表或数字,它们不是可编写脚本的对象,或者变量可以包含显示框、数据表或列,它们是可编写脚本的对象。还有很多其他类型,有些可以编写脚本,有些则不能。
我的猜测是加载项未明确选择数据表,错误从那里级联。在这个之前你可能需要另一个 show() 。
克雷格
回复:基于正则表达式选择的堆栈列我在将此代码转换为 JMP 插件(带有按钮)时遇到问题。 当我从脚本编辑器运行代码时,代码运行良好,但当我尝试将其作为加载项运行时,它会出现以下问题:
Send Expects Scriptable Object in access or evaluation of 'Send' , nc<I> << /*###*/获取名字/*###*/</I>
For( i = 1, i <= N Items( nc ), i++, cname = nc<I> << /*###*/get name/*###*/; model = nc<I> << get modeling type;</I></I>
如果我将第一行改为阅读, cname = dt << 获取名称(nc<I> );</I>它继续抱怨下一行。
然后我将这一行改为阅读, model = dt << 获取建模类型(nc<I> );</I>然后它向下移动到 sort() 函数,更改错误:
<CODE> Send Expects Scriptable Object in access or evaluation of 'Send' , 转置 <<SPAN style="font-family: arial, helvetica, sans-serif;">代码读取</SPAN>
transposed = transposed << /*###*/ sort(replace table, by("Row 1"), order(Descending))/*###*/;<BR /><SPAN style="font-family: arial, helvetica, sans-serif;">关于如何解决这个问题以及使其可移植(在编辑器和插件中都可以毫无问题地工作)的任何想法? 对于这看起来多么不清楚,我深表歉意。</SPAN>
(哇,为什么没有消息预览按钮...)。
回复:基于正则表达式选择的堆栈列是的,我在 JSL 中留下了一些显示函数,因为它们是有用的调试辅助工具。完成后将它们取出,这样日志就不会被旧问题的旧答案弄得乱七八糟。
克雷格
回复:基于正则表达式选择的堆栈列欢迎,谢谢。尽可能使用显式数据表:
dtstacked = dt << 堆栈(
列(图标),
源标签列(“标签”),
堆叠数据列(“数据”)
);
dtstacked 将引用从 dt<回复:基于正则表达式选择的堆栈列
伟大的! 这正是我所需要的。
我仍然熟悉 jsl 语法和“显示”所有内容的需要。
对于 Regex() 函数,我找不到任何关于在常规列函数之外使用它的文档,所以这很方便,它的工作方式相同。 这将在很多方面证明是有用的。
相关的,我如何确保我选择了新表/窗口以用于脚本的其余部分?
另外,我肯定不得不关闭翻译,因为它弄乱了代码。
谢谢你!
回复:基于正则表达式选择的堆栈列您可能必须关闭屏幕顶部的翻译复选框才能正确查看 JSL。
回复:基于正则表达式选择的堆栈列像这样的东西。
dt = Open( "$sample_data/big class.jmp" );
allCols = dt << getcolumnnames;
显示(所有列); // 这些是名字,不是字符串
acols = {}; // 名称中带有“a”的列
图标 = {}; // 名称中带有“i”的列
n = N 项( allCols );
对于 ( k = 1, k <= n, k++,
cname = allCols << 获取名称; // 这些是字符串,适合正则表达式
显示(用户名);
If( !Is Missing( Regex( cname, "a" ) ),
插入(acols,allCols) // 保留名字
);
If( !Is Missing( Regex( cname, "i" ) ),
插入(图标,allCols) // 保留名称
);
);
显示(acols,icols); // {:name, :age} 和 {:height, :weight}
dt << 栈(
列(图标),
源标签列(“标签”),
堆叠数据列(“数据”)
);
