Combina N colonne (per i parametri M) in una colonna univoca per parametro basata su regex usando JSLCiao,
Ho N colonne con dati numerici, alcune delle colonne sono vuote per una data riga (quindi i parametri di interesse sono sparsi per colonna)
Le colonne N rappresentano i parametri M e mi piacerebbe avere ciascuno dei parametri M combinati in una singola colonna.
Idealmente mi piacerebbe avere una guida su come scrivere questo script in JSL e avere qualche forma o regex incorporati in modo da poterlo fare per un gran numero di colonne basate su parole chiave
Allegare una tabella di dati di esempio molto semplice.
Ri: Combina N colonne (per i parametri M) in una colonna univoca per parametro basata su regex usando JCiao, mpanggabean!
Per favore, dicci se è corretto: desideri impilare colonne che contengono, ad esempio, "param1" e "domain1" e "vdd", e presumibilmente anche "paramx" e "domainy" e "zzz" come colonne separate.
Quante colonne e righe prevedi inizi e finisci con?
Ri: Combina N colonne (per i parametri M) in una colonna univoca per parametro basata su regex usando JCon queste cose, dipende molto da cosa si può tranquillamente assumere riguardo ai dati (e cosa non si può!). Se ho capito bene, il codice sotto funziona per la tabella di esempio data (e tabelle 'simili'). Potrebbe essere generalizzato, o, con un po 'più di lavoro, fatto per costruire colonne formula (sfruttando @Jeff_Perkinson l'uso di 'Sum ()' sopra).
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));
);
Ri: Combina N colonne (per i parametri M) in una colonna univoca per parametro basata su regex usando JCiao Jeff,
Sì, dovrebbe esserci solo una colonna con un valore di parametro, tuttavia ci sono troppi parametri e parametri secondari. Ad esempio param1 può avere: param1_domain1_vdd1, param1_also_domain1_vdd1, param1_domain1_vdd2, param1_also_domain1_vdd2, param1_domain1_vdd3, param1_also_domain1_vdd3, e così via. Vorresti solo consolidare un parametro w / nello stesso dominio e lo stesso vdd e potrebbe avere un numero complessivo maggiore di parametri. Pertanto, vorrei evitare di selezionare e sommare troppe volte. Qualche ulteriore suggerimento?
Grazie però per il semplice punto di partenza!
Ri: Combina N colonne (per i parametri M) in una colonna univoca per parametro basata su regex usando JSe si è certi che ci sarà una sola colonna con un valore di parametro, è possibile utilizzare la funzione Sum (). Questo perché Sum () ignora i valori mancanti. Quindi la somma dei valori dei parametri sarà il valore del parametro non memorizzato.

Ri: Combina N colonne (per i parametri M) in una colonna univoca per parametro basata su regex usando J @mpanggabean ,
Il seguente script ti aiuterà a separare l'elenco di colonne in 2 elenchi. Le 2 liste lo diranno
1. Quali sono i nomi delle colonne che contengono i parametri
2. Quali sono i parametri unici disponibili nella tabella.
Da qui o con questo script di base puoi manipolare i dati come mai hai scelto.
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);