拆分資料表問題<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我在分割資料表時遇到問題,想知道是否有人知道如何處理。 我的數據如下所示:

數據應分割為識別號2和ID是組變數。 當我這樣做時,我最終會得到這樣的結果:

問題是對於ID s 2 和 4 欄位中有多個 C 值識別號2 。 JMP 似乎始終使用拆分資料表中的最後一個值。
是否有任何自動方法可以做到這一點,以便我最終得到如下所示的表格?

這裡有兩行 ID 2 和 4,代表原始資料中 C 的不同值。
感謝您的幫忙!
賽巴斯蒂安
回覆:拆分資料表問題謝謝姆夏普,
效果很好。
當你在寫的時候,保持簡單可能是最好的方法。
回覆:拆分資料表問題一般來說,我會遠離這種方法,靜態資料通常比動態資料更安全。 你必須問自己數據的順序有多重要?此解決方案將使鍵保持有序,但值可以自由漫遊。但...
此解決方案僅適用於數字列。如果我們將 :ID2 替換為 :ID2Num,其中 A's = 1,B's =2 等。您可以簡單地使用 & 語句,因此公式為 :Sum( :ID[Index( 1, Row() )] == :ID & :ID2Num[Index( 1, Row() )] == :ID2Num ) 。
如果你有角色專欄,你必須更有創意。因此對於公式:
長度(concat items(:ID2[Index( 1, Row() )],"")) - length(substitute(concat items(:ID2[Index( 1, Row() ))],""), :ID2 , “”))
或者
dt1 << 新欄位("Concat", 字元, 名義值, 公式(:ID2 || char(:ID)));
dt1 << 新列("重複", 字元, 名義值, 公式((長度(concat items(:Concat[Index( 1, Row() )],"")) - length(substitute(concat items(:Concat [ Index( 1, Row() )],""), :Concat,"")))/2)); //最後的2佔連接字串的長度
這裡發生了很多事情,我現在沒有精力解釋。但如果您有疑問,請告訴我;實際上,上面有一個更可行、更簡單的解決方案。
回覆:拆分資料表問題謝謝姆夏普,
順便說一下,在上一篇文章中 @ms 提供了這個索引公式:Sum( :ID[Index( 1, Row() )] == :ID ) @多發性硬化症提供了這個索引公式:Sum( :ID[Index( 1, Row() )] == :ID )
回覆:語法:如何透過 ID 建立索引列
有沒有辦法在這種情況下使用它?有兩個索引列,其中之一是按字母順序排列的?
最好的,
榮恩
回覆:拆分資料表問題只是結合/總結所提到的內容。 確保事先對資料進行排序,否則 Lag() 函數將會出現問題。此外,使用公式比使用 for every row() 指令更快。如果您擔心後排序可能會影響稍後的 lag() 函數,只需刪除公式即可避免衝突。因此:
名稱預設到這裡( 1 ) ;
// 桌子
dt1 =新表( “塞巴斯蒂安” ,
新專欄( “ID” ,
數位,
“名義” ,
格式( “最好的” , 12 ) ,
設定值( [ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 , 2 , 2 ] )
) ,
新專欄( “ID2” ,
特點,
“名義” ,
設定值(
{ “A” , “乙” , “C” , “D” , “A” , “B” , “C” , “C” , “A” , “B” , “C” , “D” , “A” , “B” ,
“C” , “C” , “C” , “乙” }
)
) ,
新專欄( “價值” ,
數位,
“名義” ,
格式( “最好的” , 12 ) ,
設定值(
[ 111 , 222 ,第333章,第444章, 111 , 222 ,第333章,第555章, 111 , 222 ,第555章,第444章, 111 , 222 ,
第555章,第666章,第777章,第888章]
)
)
) ;
// 需要對表格進行排序,以便下一步中的公式能夠發揮作用
dt1 <<種類(更換桌子,
經過( : ID , :識別號2 ) ,
命令(上升,上升)
) ;
// 新增輔助列
dt1 <<新專欄( “重複” ,
數位,
“名義” ,
格式( “最好的” , 12 ) ,
公式(如果( :識別號2 !=落後( :識別號2 , 1 ) |排() == 1 , 1 ,落後( :重複, 1 ) + 1 ) )
) ;
:重複<<刪除公式; // 比 'for every row()' 快
// 分裂
dt2 = dt1 <<分裂(
分割依據( :識別號2 ) ,
分裂( :價值) ,
團體( : ID , :重複)
) ;
// 刪除一個輔助的柱子
dt2 <<刪除列( :重複) ;
回覆:拆分資料表問題你好塞巴斯蒂安霍夫邁斯特,
嘗試這個:
dt =新表( “原始數據” ,
新增行( 16 ) ,
新專欄( “ID” ,
數位,
連續的,
格式( “最好的” , 12 ) ,
設定值( [ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 ] )
) ,
新專欄( “ID2” ,
特點,
標稱,
設定值(
{ “A” , “B” , “C” , “D” , “A” , “乙” , “C” , “C” , “A” , “乙” , “C” , “D” , “A” , “乙” ,
“C” , “C” }
)
) ,
新專欄( “價值” ,
數位,
連續的,
格式( “最好的” , 12 ) ,
設定值(
[ 111 , 222 ,第333章,第444章, 111 , 222 ,第333章,第555章, 111 , 222 ,第555章,第444章, 111 , 222 ,
第555章,第666章]
)
)
) ;
// 需要對表格進行排序,以便下一步中的公式能夠發揮作用
dt <<種類(更換桌子,
經過( : ID , :識別號2 ) ,
命令(上升,上升)
) ;
// 引入一個新的索引來識別重複項
dt <<新專欄( “ID3” ) ;
對於每一行(如果( // 不要在列中使用公式,因為它取決於稍後可能會更改的排序。
排() == 1 , ID3 =: ID ,
: ID !=落後( : ID , 1 ) | :識別號2 !=落後( :識別號2 , 1 ) , ID3 = : ID ,
ID3 =落後( : ID3 , 1 ) + 1
)) ;
// 現在你可以拆分錶了
已排序= dt <<分裂(
分割依據( :識別號2 ) ,
分裂( :價值) ,
團體( : ID3 , : ID ) ,
輸出表( “分割表” )
) ;
最好的,
榮恩
回覆:拆分資料表問題哎呀! 抱歉,是的,賽巴斯蒂安。 也許類似?
// 新增輔助列
等待( 3 ) ;
dt1 <<新專欄( “重複” ,
數位,
“名義” ,
格式( “最好的” , 12 ) ,
公式(如果( :識別號2 !=落後( :識別號2 , 1 ) |排() == 1 , 1 ,落後( :重複, 1 ) + 1 ) )
) ;
回覆:拆分資料表問題感謝伊恩的支持!
這或多或少就是我正在做的事情。 現實世界中的問題當然是資料集有大約 3k 行,我無法想像一個公式來自動而不是手動建立重複列。
您也知道解決方案嗎? 我想避免編寫巢狀多個 for 迴圈來產生「重複」列的腳本。 聽起來效率很低。
謝謝,
賽巴斯蒂安
回覆:拆分資料表問題我認為你需要一個輔助專欄,塞巴斯蒂安。
名稱預設到這裡( 1 ) ;
// 桌子
dt1 =新表( “塞巴斯蒂安” ,
新增行( 16 ) ,
新專欄( “ID” ,
數位,
“名義” ,
格式( “最好的” , 12 ) ,
設定值( [ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 ] )
) ,
新專欄( “ID2” ,
特點,
“名義” ,
設定值(
{ “A” , “乙” , “C” , “D” , “A” , “B” , “C” , “C” , “A” , “B” , “C” , “D” , “A” , “乙” ,
“C” , “C” }
)
) ,
新專欄( “價值” ,
數位,
“名義” ,
格式( “最好的” , 12 ) ,
設定值(
[ 111 , 222 ,第333章,第444章, 111 , 222 ,第333章,第555章, 111 , 222 ,第555章,第444章, 111 , 222 ,
第555章,第666章]
)
)
) ;
// 新增輔助列
等待( 3 ) ;
dt1 <<新專欄( “重複” ,
數位,
“名義” ,
格式( “最好的” , 12 ) ,
設定值( [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 ] )
) ;
// 分裂
dt2 = dt1 <<分裂(
分割依據( :識別號2 ) ,
分裂( :價值) ,
團體( : ID , :重複)
) ;
// 刪除輔助列
等待( 3 ) ;
dt2 <<刪除列( :重複) ;