Seleccionar columnas con un "patrón"Hola
Esta es una tarea simple pero no encontré una manera inmediata de hacerlo.
Tengo una tabla con muchas columnas (~5000); Necesito seleccionar un subconjunto de columnas y luego extraer una tabla de subconjunto.
La forma más tonta de hacerlo sería seleccionar cada columna del selector de columnas.
En realidad, podría identificar fácilmente la columna que necesito aplicando al nombre de la columna un "patrón".
Por ejemplo, sea la columna la siguiente:
AAA11
AAA12
ABB22
XXX99
CAB32
CAB99
Necesito seleccionar las columnas cuyo nombre incluye una "B" y termina en un "2"
Podrían identificarse mediante un patrón como "*B*2" , donde "*" es un comodín.
En el ejemplo, el patrón seleccionaría "ABB22" y "CAB32".
No encontré una manera fácil de hacer esto.
gracias de antemano
emmanuel
Combinación y limpieza de datosRe: Seleccionar columnas con un "patrón"Si realmente necesita expresiones regulares y tiene una versión reciente de JMP que incluye FilterEach:
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.*))$" ) ) );
{"nombre", "edad", "sexo"}
Como siempre, escribir expresiones regulares es más divertido que leerlas. Tenga cuidado con varios .* en una sola expresión regular que podrían no coincidir... podría probar muchas alternativas infructuosas.
Re: Seleccionar columnas con un "patrón"Aquí hay un script simple para generar una lista de columnas que cumplan con los criterios.
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 )
)
);