基於使用JSL的正則表達式將N列(對於M參數)組合成每個參數的唯一列你好,
我有N列數字數據,某些列對於給定行是空白的(因此感興趣的參數是按列分散的)
N列表示M個參數,我希望將每個M參數組合成一個列。
理想情況下,我想獲得有關如何在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參數)組合成每個參數的唯一列傑夫,
是的,應該只有一個列具有參數值,但是,參數和子參數太多。例如,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參數)組合成每個參數的唯一列如果您可以確定只有一個帶參數值的列,則可以使用Sum()函數。這是因為Sum()忽略了缺失值。因此參數值的總和將是非缺失參數的值。

Re:基於使用J的正則表達式,將N列(對於M參數)組合成每個參數的唯一列 @mpanggabean ,
以下腳本將幫助您將列列表分成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);