选择具有“模式”的列你好
这是一项简单的任务,但我没有找到立即执行的方法。
我有一个包含很多列的表(~5000);我需要选择列的子集,然后提取子集表。
最愚蠢的方法是从列选择器中选择每一列。
实际上,我可以通过对列名称应用“模式”来轻松识别我需要的列
例如,让列如下所示:
AAA11
AAA12
ABB22
XXX99
CAB32
CAB99
我需要选择名称中包含“B”并以“2”结尾的列
它们可以通过诸如 "*B*2" 之类的模式来识别,其中 "*" 是通配符。
在示例中,模式将选择“ABB22”和“CAB32”
我没有找到一种简单的方法来做到这一点。
提前致谢
埃马努埃莱
数据表回复:选择具有“模式”的列这是一个简单的脚本,用于列出符合条件的列
Names Default To Here( 1 );
dt = Current Data Table();
colList = dt << get column names( string );
For( i = N Items( colList ), i >= 1, i--,
If( !(Contains( colList[i], "B" ) & Right( colList[i], 1 ) == "2"),
Remove From( colList, i, 1 )
)
);
回复:选择具有“模式”的列如果您确实需要正则表达式并且拥有包含 FilterEach 的最新版本的 JMP:
dt = Open( "$sample_data/big class.jmp" );
colList = dt << get column names( string );
// (>?.*?) is an atomic match for a reluctant (not greedy) match of 0 or more characters
// atomic is important when the match might fail to keep if from slowing down a lot on long names
Filter Each( {name}, colList, !Is Missing( Regex( name, "^((.e.)|((>?.*?)a(>?.*?)e.*))$" ) ) );
{“姓名”、“年龄”、“性别”}
和往常一样,正则表达式写起来比读起来更有趣。请注意单个正则表达式中的多个 .* 可能不匹配...它可能会尝试很多无用的方法。