Combine N columnas (para parámetros M) en una columna única por parámetro basado en expresiones regulares usando JSLHola,
Tengo N columnas con datos numéricos, algunas de las columnas están en blanco para una fila determinada (por lo que los parámetros de interés están dispersos en las columnas)
Las columnas N representan los parámetros M y me gustaría tener cada uno de los parámetros M combinados en una sola columna.
Idealmente, me gustaría obtener orientación sobre cómo escribir esto en JSL y tener alguna forma o expresión regular incorporada para poder hacer esto para una gran cantidad de columnas basadas en palabras clave
Adjuntando una tabla de datos de muestra muy básica.
Re: Combine N columnas (para parámetros M) en una columna única por parámetro basado en expresiones regulares usando JHola, mpanggabean!
Díganos si esto es correcto: desea apilar columnas que contengan, por ejemplo, "param1" y "domain1" y "vdd", y también presumiblemente "paramx" y "domainy" y "zzz" como columnas separadas.
¿Con cuántas columnas y filas anticipas comenzar y terminar con?
Re: Combine N columnas (para parámetros M) en una columna única por parámetro basado en expresiones regulares usando JCon estas cosas, depende mucho de lo que pueda asumir de forma segura sobre los datos (¡y de lo que no puede!). Si entiendo correctamente, el siguiente código funciona para la tabla de muestra dada (y tablas 'similares'). Se podría generalizar, o, con un poco más de trabajo, hacer para construir columnas de fórmulas (explotando @Jeff_Perkinson uso de 'Sum ()' arriba).
NamesDefaultToHere(1);
dt = CurrentDataTable();
// First data column
fdc = 2;
// Number of columns in a group
nc = 2;
// Number of groups
ng = (NCol(dt) - 1) / nc;
// Loop over each group and add a 'sum' column for each
for(g=1, g <=ng, g++,
firstCol = fdc + (g-1)*nc;
lastCol = firstCol + (nc-1);
gData = dt << getAsMatrix(firstCol::lastCol);
// Replace ',' by '0' so 'VSum()' works as required
gData[loc(IsMissing(gData))] = 0;
// Get the sum of columns using 'VSum()' (need to transpose, and back again)
sumVals = Transpose(VSum(Transpose(gData)));
// Make the new column
cName = Column(dt, firstCol) << getName;
dt << NewColumn(cName||"_Sum", Numeric, Continuous, Values(sumVals));
);
Re: Combine N columnas (para parámetros M) en una columna única por parámetro basado en expresiones regulares usando JHola Jeff,
Sí, solo debe haber una columna con un valor de parámetro, sin embargo, hay demasiados parámetros y subparámetros. Por ejemplo, param1 puede tener: param1_domain1_vdd1, param1_also_domain1_vdd1, param1_domain1_vdd2, param1_also_domain1_vdd2, param1_domain1_vdd3, param1_also_domain1_vdd3, y así sucesivamente. Solo querría consolidar un parámetro con el mismo dominio y el mismo vdd y puede tener un mayor número total de parámetros. Por lo tanto, me gustaría evitar seleccionar y sumar demasiadas veces. ¿Alguna otra sugerencia?
Gracias por el simple punto de partida!
Re: Combine N columnas (para parámetros M) en una columna única por parámetro basado en expresiones regulares usando JSi puede estar seguro de que solo habrá una columna con un valor de parámetro, puede usar la función Suma (). Esto se debe a que Sum () ignora los valores perdidos. Entonces, la suma de los valores de los parámetros será el valor del parámetro que no falta.

Re: Combine N columnas (para parámetros M) en una columna única por parámetro basado en expresiones regulares usando J @mpanggabean ,
La siguiente secuencia de comandos le ayudará a separar la lista de columnas en 2 listas. Las 2 listas te lo dirán.
1. ¿Cuáles son los nombres de columna que contienen parámetros?
2. ¿Cuáles son los parámetros únicos disponibles en la tabla?
Desde aquí o con este script base, puede manipular los datos como quiera que elija.
Clear Log () ; Clear Globals();
dt = Current Data Table() ; // Getting a reference to the table . Alternatively you can open the file using Open()
ColNames = dt << Get Column Names("String"); // Acquire names of columns in table as string
ParameterColList = list(); // Intialize an empty list
ParamsList = list() ;
KeyWord = "param"; // Define Keyword all your parameters have
CommonDelim = "_";
for(i = 1 , i <= N Items(ColNames), i++,
If(!IsMissing(Regex(Char(ColNames[i]),KeyWord)),
Insert Into(ParameterColList,ColNames[i]);
If(Contains(ColNames[i],CommonDelim),
Pos = Contains(ColNames[i],CommonDelim); // Identify where the common delimiter is
Insert Into(ParamsList,Substr(ColNames[i],1,Pos-1));
);
);
);
Show(ParameterColList); // Display List
Show(ParamsList);