Re: 文字 (「<」) を含む列を数値にリセットし、「<」を別の列に保持しようとしています。万が一に備えてテーブルも付属。
Re: 文字 (「<」) を含む列を数値にリセットし、「<」を別の列に保持しようとしています。これにより、何ができるかについていくつかのアイデアが得られるかもしれません
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(2),
Compress File When Saved(1),
New Column("Column 1", Character, "Nominal", Set Values({"<1", "<3"})),
New Column("Column 2", Character, "Nominal", Set Values({"<2", "<4"}))
);
col_names = dt << Get Column Names("String");
For Each({col_name}, col_names,
dt << New Column(col_name ||"_Q", Numeric, Continuous, << Set Each Value(
Num(Substitute(AsColumn(dt, col_name), "<", ""));
));
);
Substitute() の使用方法の詳細については、Substitute() のスクリプト インデックスとスクリプト ガイドを検索してください。
Re: 文字 (「<」) を含む列を数値にリセットし、「<」を別の列に保持しようとしています。その部分をテーブルへの参照に置き換えるだけです。 また、どれを使用すべきかがわかっている場合は、(<< get column names("String") を使用してすべての列を取得するのではなく) 列の選択をクリーンアップすることもできます。
Re: 文字 (「<」) を含む列を数値にリセットし、「<」を別の列に保持しようとしています。残念ながら、そのコードが私の元の質問にどのように適用されるのかを理解していません。おそらく元の投稿では明確でなかったか、何かが欠けています(私はJSLの初心者です)。いずれにせよ、私は努力を続けますので、質問を再構成する必要があるかもしれません。(ところで、私は非常に多くの列を使用していますが、datetime 列を除くすべての列でこの処理が必要です。手作業で定義するには多すぎます。) 改めて感謝いたします。
Re: 文字 (「<」) を含む列を数値にリセットし、「<」を別の列に保持しようとしています。以下は、< と、「J」や「UJ」などのポスト スクリプト値をチェックし、その値を新しい修飾子列に移動するスクリプトです。次に、列を文字列から数値列に変換します。

Names Default To Here( 1 );
dt = Current Data Table();
colNames = dt << get column names( string, character );
For Each( {col, i}, colNames,
GTFound = "NO";
postScriptFound = "NO";
// Find rows that have < in them
theRows = dt << get rows where( Contains( As Column( dt, col ), "<" ) );
// If < is found then
// 1. Create a new column to hold the < in
// 2. Loop through the rows with < and
// 1. Add < to the appropriate row in the new Qualifier column
// 2. Delete the < from the current column
If( N Rows( theRows ) > 0,
GTFound = "YES";
dt << add Multiple Columns( col, 1, Character );
Column( dt, N Cols( dt ) ) << set name( col || "_QUALIFIER" );
dt << move selected column( after( As Column( col ) ) );
For Each( {fixRow, k}, theRows,
As Column( dt, col || "_QUALIFIER" )[fixRow] = "<";
As Column( dt, col )[fixRow] = Substr( Column( col )[fixRow], 2 );
);
);
// Find if there are any post script values on any of the rows
theRows = dt << get rows where( Word( 2, As Column( dt, col ), " " ) != "" );
// If found, then if a new column has not already been add, add the new Qualifer column
If( N Rows( theRows ) > 0,
postScriptFound = "YES";
If( GTFound == "NO",
dt << add Multiple Columns( col, 1, Character );
Column( dt, N Cols( dt ) ) << set name( col || "_QUALIFIER" );
dt << move selected column( after( As Column( col ) ) );
);
// Loop through the rows with post scripts and
// 1. Add the post scripts to the Qualifer column
// 2. Delete the post scripts from the current column
For Each( {fixRow, k}, theRows,
As Column( dt, col || "_QUALIFIER" )[fixRow] = Trim(
As Column( dt, col || "_QUALIFIER" )[fixRow] || " " || Word( 2, As Column( dt, col )[fixRow], " " )
);
As Column( dt, col )[fixRow] = Word( 1, As Column( dt, col )[fixRow], " " );
);
);
// If eiter < or Post Scripts were found, convert the column to numeric, continuous
If( GTFound == "YES" | postScriptFound == "YES",
Column( dt, col ) << data type( numeric ) << modeling type( continuous )
);
);
文字(「<」)を含む列を数値にリセットし、「<」を別の列に保持しようとしていますこんにちは。テキスト文字列として入力されたラボ結果 (数値) で構成される列を含むテーブルがあります。数値の前に「<」が付いているものがあるため、テキスト文字列です。値に対して数値計算を実行できるようにする必要があるため、「<」記号を削除して、「ORIGCOLNAME_QUALIFIER」という名前の新しい列に配置しようとしています (ORIGCOLNAME は「<」が含まれる列の名前です) " 記号は削除されました)。
残念ながら、以下のコードは機能しません。
Names Default To Here( 1 );
dt = Current Data Table();
compList = {};
For( i = 1, i <= N Cols( dt ), i++,
colName = Column( dt, i ) << get name;
);
// Create the columns
For Each( {comp, i}, compList,
Eval(
Parse(
"dt << New Column( \!"" || compList[i] || "_QUALIFIER" ||
"\!",
character, nominal,
formula(
x=.;
if (comp << contains ("<"), x = <);
次のメッセージが表示されます。

ご意見をいただければ幸いです。
基本的なデータ分析とモデリングコンテンツの構成データのブレンディングとクリーンアップRe: 文字 (「<」) を含む列を数値にリセットし、「<」を別の列に保持しようとしています。ありがとう、jthi - コードの最初の部分では、事前に名前が付けられた列を持つ新しい 2 行のテーブルが作成されます。
Names Default To Here( 1 );
dt = New Table( "Untitled",
Add Rows( 2 ),
Compress File When Saved( 1 ),
New Column( "Column 1", Character, "Nominal", Set Values( {"<1", "<3"} ) ),
New Column( "Column 2", Character, "Nominal", Set Values( {"<2", "<4"} ) )
);
ただし、既存の各列に対応する名前で最後に「_qualifier」が付いている新しい列を追加しながら、列名をそのまま維持しようとしています。(例: 既存の列が塩化物 (文字)、硫酸塩 (硫酸塩) などであるとします。新しい列は、塩化物 (数値)、硫酸塩 (数値)、塩素修飾子 (文字)、硫酸修飾子 (文字) などになります。
Re: 文字 (「<」) を含む列を数値にリセットし、「<」を別の列に保持しようとしています。それは完璧に機能しました。コメント行は、プロセスの各ステップを理解するのに役立つため、最も役立ちます。これは、これらの JSL の基礎をデータセットに実際に適用する方法を学ぶときに、ヘルプ ドキュメントで見つけられる内容を補強するものです。どうもありがとうございます。
Re: 文字 (「<」) を含む列を数値にリセットし、「<」を別の列に保持しようとしています。私にはあなたのニーズが理解できないかもしれません。特にデータに多くの行がある場合には、これを行うためのより効率的な方法がある可能性がありますが、このテーブルが希望する結果のように見える場合は、総当たりの方法を次に示します。

Names Default To Here(1);
id_colnames = {"well", "Sample Date"};
dt = Current Data Table();
nr =nrow(dt);
col_names = dt << Get Column Names("String");
For Each({col_name}, col_names,
If( !Contains(id_colnames, col_name),
dt << New Column(col_name||"_Q", Character, << Set Each Value(
If(Contains(AsColumn(dt,col_name), "<"), "<",""))
);
curr_col = column(dt,col_name);
For(i=1, i<=nr, i++,
curr_col[i]= Substitute( word(1, curr_col[i]) ,"<","");
);
curr_col << Set Data Type(Numeric) << Set Modeling Type ("Continuous");
); // end If()
); //end For Each()
Re: 文字 (「<」) を含む列を数値にリセットし、「<」を別の列に保持しようとしています。ありがとうGZMorngan0!ごめんなさい、返信が遅くなってしまいました。先ほどスレッドを確認してみました。
別のテクニックを見ていただければ幸いです。