Combinez N colonnes (pour les paramètres M) dans une colonne unique par paramètre en fonction de regex utilisant JSLBonjour,
J'ai N colonnes avec des données numériques, certaines des colonnes sont vides pour une ligne donnée (les paramètres d'intérêt sont donc dispersés par colonne)
Les N colonnes représentent M paramètres et j'aimerais combiner chacun des paramètres M en une seule colonne.
Idéalement, j'aimerais savoir comment scripter cela en JSL et incorporer une forme ou une expression régulière afin que je puisse le faire pour un grand nombre de colonnes en fonction de mots-clés.
Joindre un exemple de tableau de données très basique.
Re: Combinez N colonnes (pour M paramètres) dans une colonne unique par paramètre basé sur regex en utilisant JBonjour mpanggabean!
Veuillez nous indiquer si cela est correct: vous souhaitez empiler des colonnes contenant, par exemple, "param1", "domain1" et "vdd", ainsi que, vraisemblablement, "paramx", "domainy" et "zzz" sous forme de colonnes séparées.
Combien de colonnes et de lignes prévoyez-vous commencer et se terminer avec?
Re: Combinez N colonnes (pour M paramètres) dans une colonne unique par paramètre basé sur regex en utilisant JAvec ces éléments, tout dépend de ce que vous pouvez supposer en toute sécurité à propos des données (et de ce que vous ne pouvez pas!). Si je comprends bien, le code ci-dessous fonctionne pour l'exemple de tableau donné (et les tableaux 'similaires'). Il pourrait être généralisé ou, avec un peu plus de travail, créé des colonnes de formules (en exploitant @Jeff_Perkinson l'utilisation de 'Sum ()' ci-dessus).
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: Combinez N colonnes (pour M paramètres) dans une colonne unique par paramètre basé sur regex en utilisant JSalut Jeff
Oui, il ne devrait y avoir qu'une seule colonne avec une valeur de paramètre, cependant, il y a trop de paramètres et de sous-paramètres. Par exemple, param1 peut avoir: param1_domain1_vdd1, param1_also_domain1_vdd1, param1_domain1_vdd2, param1_also_domain1_vdd2, param1_domain1_vdd3, param1_also_domain1_vdd3, etc. Voudrait seulement consolider un paramètre w / dans le même domaine et le même vdd et peut avoir un plus grand nombre de paramètres. Par conséquent, j'aimerais éviter de sélectionner et de sommer trop de fois. Des suggestions supplémentaires?
Merci cependant pour le point de départ simple!
Re: Combinez N colonnes (pour M paramètres) dans une colonne unique par paramètre basé sur regex en utilisant JSi vous pouvez être sûr qu'il n'y aura qu'une seule colonne avec une valeur de paramètre, vous pouvez utiliser la fonction Sum (). En effet, Sum () ignore les valeurs manquantes. Donc, la somme des valeurs du paramètre sera la valeur du paramètre non manquant.

Re: Combinez N colonnes (pour M paramètres) dans une colonne unique par paramètre basé sur regex en utilisant J @mpanggabean ,
Le script suivant vous aidera à séparer la liste des colonnes en 2 listes. Les 2 listes vous diront
1. Quels sont les noms de colonne qui contiennent des paramètres
2 Quels sont les paramètres uniques disponibles dans le tableau.
À partir de là ou avec ce script de base, vous pouvez manipuler les données comme bon vous semble.
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);