Re: script jsl para recodificar varias columnas¡Gracias!
Re: script jsl para recodificar varias columnasUna solución alternativa sería crear una nueva columna con una fórmula basada en la columna que desea volver a codificar.
Luego elimina la columna original
Re: script jsl para recodificar varias columnas¡Muchas gracias!
Re: script jsl para recodificar varias columnasAquí está la solución usando la función Recode escrita en JSL. Es mucho más rápido que hacer el procesamiento fila por fila.
Names Default To Here( 1 );
dmdt = current data table();
nc = dmdt << get column names( Character );
For( i = 1, i <= N Items( nc ), i++,
col = Column( dt, nc[i] );
colname = col << getname();
Eval(
Parse(
Eval Insert(
"\[
dmdt << Recode Column(
:Name("^colname^"),
{Map Value( _rcOrig,
{ "1", "too low",
"2", "too low",
"3", "right",
"4", "too high",
"5", "too high"},
Unmatched( _rcNow ) )},
Update Properties( 1 ),
Target Column( :Name("^colname^") )
);
]\"
)
)
);
);
Re: script jsl para recodificar varias columnasMuchas gracias, su código con la matriz asociativa funcionó perfectamente.
Probé también la otra opción, agregando
Match(As Column( lstColNames_n3[i])[Row()],
Pero eso no funcionó.
Pero resolví mi problema.
Muchas gracias.
Re: script jsl para recodificar varias columnasEdité mi respuesta anterior, debería ayudar con la recodificación.Re: script jsl para recodificar varias columnasNecesitaría recodificar valores. Gracias.
Re: script jsl para recodificar varias columnas¿Tiene que volver a codificar los valores o podría usar etiquetas de valor de propiedad de columna (de esta manera no perderá los datos originales), ejemplo: Recodificar múltiples columnas con script JSL
Editar:
Y si tiene que recodificarlos en su lugar, hay varias formas de hacerlo (yo usaría Associative Array):
Names Default To Here(1);
dt3 = current data Table ();
n3 = dt3 << Get Column Names(string);
show(n3);
//create associative array to use matching keys to values
matchAa = Associative Array(
{"1","2","3","4","5"},
{"too low","too low","right","too high","too high"}
);
show(matchAa);
//loop over column names
For(i = 1, i <= N Items(n3), i++,
//refer to column and use set each value to update values
Column(dt3, n3[i]) << Set Each Value(
matchAa[AsColumn(n3[i])[Row()]]
);
);
Y para su solución, creo que hay un problema en la forma en que se refiere a los valores en la función Match y debe agregar [Row()] para obtener valores únicos para Matching
Match(As Column( lstColNames_n3[i])[Row()],
Edit2:
Se agregó un script de ejemplo completo como archivo adjunto
script jsl para recodificar varias columnasEstimados,
Estoy tratando de recodificar varias columnas usando el siguiente script (también adjunto junto con una tabla de datos de ejemplo). Intenté varios cambios pero no funciona. Los valores en las columnas simplemente desaparecen en lugar de recodificarse.
Agradezco cualquier ayuda.
Muchas gracias,
Marcello.
dt3 = Current Data Table();
n3 = dt3 << Get Column Names();
Show( n3 );
lstColNames_n3 = dt3 << Get Column Names();
Show( lstColNames_n3 );
Show( lstCols_n3 );
lstCols_n3 = {};
For( i = 1, i <= N Items( lstColNames_n3 ), i++,
colName = lstColNames_n3[i];
col = Column( dt3, i );
Insert Into( lstCols_n3, col );
);
Show( lstCols_n3 );
For Each Row(
For( i = 1, i <= N Items( lstColNames_n3 ), i++,
As Column( lstColNames_n3[i] ) = Match( As Column( lstColNames_n3[i] ),
"1", "too low",
"2", "too low",
"3", "right",
"4", "too high",
"5", "too high"
)
)
);
Modelado Estadístico AvanzadoAutomatización y secuencias de comandosFusión y limpieza de datosDiseño de experimentosLa personalización en masaIngeniería de Calidad y Procesos