データのクリーンアップ: 名前がわずかに異なり、データが交差しない複数の列を 1 つに結合するにはどうすればよいでしょうか?列名がわずかに異なる 2 つ以上の異なるソースから作成されたエクスポートされた CSV があります。
どの行にも、これらの列の 1 つ以上にデータがあるわけではありません。以下のスクリーンショットのように:

これらすべてを 1 つの列に結合するにはどうすればよいでしょうか?
一つのアイデアとしては、
Combine Columns()
複数の回答列が生成されますが、データは交差していないため、列全体で 1 つの数字だけになります。次に、データ型を数値に、モデリング タイプを連続に強制します。ただし、警告\エラーが発生します。
もっときれいにする方法はありますか?
自動化とスクリプト基本的なデータ分析とモデリングRe: データのクリーンアップ: 名前がわずかに異なり、データが交差しない複数の列を 1 つに結合するにはどうすればよいでしょうか?私はこう対処するだろう
Names Default To Here( 1 );
dt = Current Data Table();
For Each Row(
:AA bb = Sum( :AA bb, :AA_bb_ )
);
Sum() 関数を使用すると欠損値が無視されるため、必要な値が得られます。
Re: データのクリーンアップ: 名前がわずかに異なり、データが交差しない複数の列を 1 つに結合するにはどうすればよいでしょうか?ジム、
どうもありがとう。
この解決策を使います。
列名がハードコードされないようにスクリプトを作成しようとしています。
なぜこのエラーが発生するのかよく分かりません。
For Each Row(
Column("AA bb") = 1234;
//Sum( :AA bb, :AA _bb_ )
);エラーは次のとおりです:
'Assign' のアクセスまたは評価で、行 1 の L 値ではないオブジェクトに割り当てようとしています。列 ("AA bb") = /*###*/1234 /*###*/
Re: データのクリーンアップ: 名前がわずかに異なり、データが交差しない複数の列を 1 つに結合するにはどうすればよいでしょうか?アイデアとしては、関数を記述し、その関数に辞書を渡すことです。
次のようなものです:
Names Default To Here( 1 );
dt = Current Data Table();
dict = {"AA bb", "AA _bb_"};
For Each Row(
Column(dict[1]) = Sum( Column(dict[1]), Column(dict[2]) )
);このバリアントのみ、次のエラーが発生します。
'Sum' のアクセスまたは評価では、1行目にスカラー、行列、またはリストの引数が必要です。Sum/*###*/(Column( dict[1] ), Column( dict[2] ))
Column() が期待通りに機能する場合もあれば、そうでない場合もあるという事実を、私はまったく理解できませんでした。As Column() を使用する必要がある場合もあります。また、他の方法を使用する必要がある場合もあります。
PS As Column() は動作しました。Column() と As Column() の違いを説明していただけますか?
Re: データのクリーンアップ: 名前がわずかに異なり、データが交差しない複数の列を 1 つに結合するにはどうすればよいでしょうか?さて、最後のコードスニペットは次のとおりです。
Names Default To Here( 1 );
dt = Current Data Table();
dict = {"AA bb", "AA _bb_"};
sumExpr = Expr( Sum() );
For Each( {value, index}, dict,
Insert Into( sumExpr, Name Expr( As Column( value ) ) )
);
Eval(
Substitute(
Expr(
For Each Row(
As Column( dict[1] ) = placeholder
)
),
Expr( placeholder ), Name Expr( sumExpr )
)
);
改善する方法はありますか?
Re: データのクリーンアップ: 名前がわずかに異なり、データが交差しない複数の列を 1 つに結合するにはどうすればよいでしょうか?必要以上に複雑です。このコードも、あまり考えなくても動作します。必要に応じて、2 つ以上の列名も受け入れます。
Names Default To Here( 1 );
dt = Current Data Table();
dict = {"AA bb", "AA _bb_"};
For Each Row( dt,
As Column(dict[1]) = Sum( Transform Each( {v, i}, dict, As Column( v ) ) )
);Re: データのクリーンアップ: 名前がわずかに異なり、データが交差しない複数の列を 1 つに結合するにはどうすればよいでしょうか?Column() は列オブジェクトを参照し、As Column() は現在の Row() 内のその列の値を参照します。
Re: データのクリーンアップ: 名前がわずかに異なり、データが交差しない複数の列を 1 つに結合するにはどうすればよいでしょうか?次の反復では、列名が辞書に存在するが、テーブルに存在しないケースを説明します。
Names Default To Here( 1 );
dt = Current Data Table();
dict = {"AA bb", "AA _bb_", "AA cc"};
sumExpr = Expr( Sum() );
For Each( {value, index}, dict,
If( Try( Column( value ) << Get Name, "nocolumn" ) != "nocolumn",
Insert Into( sumExpr, Name Expr( As Column( value ) ) )
)
);
Name Expr(sumExpr);
Try(
Eval(
Substitute(
Expr(
For Each Row(
As Column( dict[1] ) = placeholder
)
),
Expr( placeholder ), Name Expr( sumExpr )
)
),
Write("No columns found")
)
Transform Each を使用する場合、どのようにすればよいでしょうか?
Re: データのクリーンアップ: 名前がわずかに異なり、データが交差しない複数の列を 1 つに結合するにはどうすればよいでしょうか?連結ツールを使用してみてください:
両方の変数を含む新しい列を作成します
列を右クリック
数式を選択すると、数式エディタが開きます。
数式エディタで、左側の関数リストに移動します。
「文字」の下で、「連結」を見つけて選択します。
最初の列を Concatenate 関数の最初の引数ボックスにドラッグまたは選択します。
2 番目の列を次の引数ボックスにドラッグまたは選択します。
[OK] または [適用] をクリックして、新しい結合列を作成します。
Re: データのクリーンアップ: 名前がわずかに異なり、データが交差しない複数の列を 1 つに結合するにはどうすればよいでしょうか?Try() を追加するだけです。
Names Default To Here( 1 );
dt = Current Data Table();
dict = {"AA bb", "AA _bb_", "AA cc"};
For Each Row( dt, As Column( dict[1] ) = Sum( Transform Each( {v, i}, dict, Try( As Column( v ), . ) ) ) );