JSLを使用した正規表現に基づいて、N個の列(M個のパラメーター用)をパラメーターごとに固有の列に結合します。こんにちは、
数値データを含むN個の列がありますが、指定された行では一部の列が空白になっています(したがって、関心のあるパラメーターは列方向に散在しています)
N個の列はM個のパラメータを表しており、M個の各パラメータを1つの列にまとめたいと思います。
理想的には、これをJSLでスクリプト化する方法についてのガイダンスを取得し、何らかのフォームまたは正規表現を組み込んで、キーワードに基づいて多数の列に対してこれを実行できるようにしたいです。
非常に基本的なサンプルデータテーブルを添付する。
Re:Jを使用した正規表現に基づいて、N個の列(M個のパラメータの場合)をパラメータごとに一意の列に結合します。こんにちは、mpanggabean!
これが正しいかどうかを教えてください。たとえば、"param1"と "domain1"、"vdd"、そしておそらく "paramx"と "domainy"と "zzz"を含む列を別々の列としてスタックします。
あなたは何列から何行までで終わると思いますか?
Re:Jを使用した正規表現に基づいて、N個の列(M個のパラメータの場合)をパラメータごとに一意の列に結合します。これらのことから、それはあなたがデータについて安全に仮定できること(そしてあなたができないこと)に大きく依存します。私が正しく理解していれば、以下のコードは与えられたサンプルテーブル(そして '類似'テーブル)に対しても有効です。それは一般化することもできれば、もう少し手を加えることで式列を構築することもできます。 @Jeff_Perkinson 上記の 'Sum()'の使用
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:Jを使用した正規表現に基づいて、N個の列(M個のパラメータの場合)をパラメータごとに一意の列に結合します。こんにちはジェフ、
はい、パラメータ値を持つ列は1つだけですが、パラメータとサブパラメータが多すぎます。たとえば、param1は、param1_domain1_vdd1、param1_also_domain1_vdd1、param1_domain1_vdd2、param1_also_domain1_vdd2、param1_domain1_vdd3、param1_also_domain1_vdd3などのようになります。同じドメインと同じvddにあるパラメーターを統合したいだけで、パラメーターの全体数が大きくなる可能性があります。 そのため、選択して合計する回数が多すぎないようにします。他に何か提案がありますか?
簡単な出発点をありがとう。
Re:Jを使用した正規表現に基づいて、N個の列(M個のパラメータの場合)をパラメータごとに一意の列に結合します。パラメータ値を持つ列が1つしかないことが確実な場合は、Sum()関数を使用できます。これは、Sum()が欠損値を無視するためです。そのため、パラメーター値の合計が、欠落していないパラメーターの値になります。

Re:Jを使用した正規表現に基づいて、N個の列(M個のパラメータの場合)をパラメータごとに一意の列に結合します。 @mpanggabean 、
次のスクリプトは、列のリストを2つのリストに分割するのに役立ちます。2つのリストがあなたに教えてくれるでしょう
1。パラメータを含む列名は何ですか
2。テーブルで利用可能なユニークなパラメータは何ですか。
ここから、またはこの基本スクリプトを使用して、どのように選択してもデータを操作できます。
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);