資料清理:如何將多個名稱略有不同且資料不相交的資料列合併為一列?我有一個導出的 CSV,它是由兩個或多個不同的來源形成的,這些來源的列名略有不同。
沒有行在其中多個列中包含資料。就像下面的螢幕截圖一樣:

如何將它們全部合併到一列中?
一種想法是使用
Combine Columns()
這將產生多重回應列,但由於資料不相交,因此整個列中只有一個數字。然後強制資料類型為數字,建模類型為連續。但它會產生警告\錯誤。
有更乾淨的方法嗎?
自動化和腳本編寫基礎資料分析與建模回覆:資料清理:如何將名稱略有不同且資料不相交的幾列合併為一列?我會這樣處理
Names Default To Here( 1 );
dt = Current Data Table();
For Each Row(
:AA bb = Sum( :AA bb, :AA_bb_ )
);
使用 Sum() 函數會忽略缺失值,因此您將獲得所需的值。
回覆:資料清理:如何將名稱略有不同且資料不相交的幾列合併為一列?吉姆,
多謝。
我將使用這個解決方案。
我現在正在嘗試編寫腳本,以便列名稱不會被硬編碼。
我不太確定為什麼會出錯:
For Each Row(
Column("AA bb") = 1234;
//Sum( :AA bb, :AA _bb_ )
);錯誤是:
嘗試在存取或評估 'Assign' 時指派給第 1 行不是左值的對象,Column( "AA bb" ) = /*###*/1234 /*###*/
回覆:資料清理:如何將名稱略有不同且資料不相交的幾列合併為一列?想法是編寫一個函數並向該函數提供一個字典。
像這樣的東西:
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' 、 Sum/*###*/(Column( dict[1] ), Column( dict[2] )) 時,需要參數為第 1 行的標量、矩陣或列表
我永遠無法理解這樣一個事實:有時 Column() 按預期工作,有時則不然。有時我需要使用 As Column()。有時還有別的事。
PS As Column() 有效。有人可以解釋 Column() 和 As Column() 之間的差異嗎?
回覆:資料清理:如何將名稱略有不同且資料不相交的幾列合併為一列?好的,我的最後一段程式碼在這裡:
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 )
)
);
有什麼辦法可以改善嗎?
回覆:資料清理:如何將名稱略有不同且資料不相交的幾列合併為一列?這比需要的要複雜一點。這段程式碼也可以工作,無需太多思考。如果需要的話,它將接受兩個以上的列名。
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 ) ) )
);回覆:資料清理:如何將名稱略有不同且資料不相交的幾列合併為一列?Column() 引用列對象,As Column() 引用目前 Row() 中該列的值。
回覆:資料清理:如何將名稱略有不同且資料不相交的幾列合併為一列?我的下一個迭代考慮了列名存在於字典中但不存在於表中的情況:
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 時您會如何做到這一點?
回覆:資料清理:如何將名稱略有不同且資料不相交的幾列合併為一列?嘗試使用連線工具:
建立一個包含兩個變數的新列
右鍵單擊該列
選擇公式以開啟公式編輯器。
在公式編輯器中,轉到左側的函數清單。
在“字元”下,找到並選擇“連接”。
將第一列拖曳到或選擇連接函數的第一個參數框中。
將第二列拖曳或選擇到下一個參數框中。
按一下「確定」或「套用」以建立新的組合列。
回覆:資料清理:如何將名稱略有不同且資料不相交的幾列合併為一列?我只想加一個 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 ), . ) ) ) );