選擇具有“模式”的列你好
這是一項簡單的任務,但我沒有找到立即執行的方法。
我有一個包含很多列的表(~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.*))$" ) ) );
{「姓名」、「年齡」、「性別」}
一如既往,正規表示式寫起來比讀起來更有趣。小心單一正規表示式中的多個 .* 可能不匹配......它可能會嘗試很多徒勞的替代方案。