データテーブルの分割の問題<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />データテーブルの分割に問題があり、誰かがその方法を知っているかどうか疑問に思っていました。 私のデータは次のようになります。

データは次のように分割する必要がありますID2とIDはグループ変数です。 このようにやっていると、次の結果になります。

問題は、 ID ■ 2 と 4 の列には C の値が複数あります。 ID2 。 JMP は常に分割されたデータ テーブルの最後の値を使用しているようです。
次のようなテーブルになるように自動的に行う方法はありますか?

ここには、元のデータの C の異なる値を表す ID 2 と 4 の 2 つの行があります。
ご協力いただきありがとうございます!
セバスチャン
Re: データテーブルの分割の問題ありがとうムシャープ、
それはうまくいきます。
そしてあなたは文章を書いているのですが、物事をシンプルにしておくことがおそらく最善の方法です。
Re: データテーブルの分割の問題一般的に、静的データは動的データよりも安全であるため、私は一般的にこのアプローチには近づきません。 データの順序がどれほど重要なのかを自問する必要があります。このソリューションではキーが順番に保持されますが、値は自由に移動できます。しかし...
このソリューションは数値列でのみ機能します。:ID2 を :ID2Num (A の = 1、B の = 2 など) に置き換えるとします。単に & ステートメントを使用することもできます。したがって、数式には :Sum( :ID[Index( 1, Row() )] == :ID & :ID2Num[Index( 1, Row() )] == :ID2Num ) となります。
文字列がある場合は、より創造的になる必要があります。したがって、式については次のようになります。
length(concat items(:ID2[Index( 1, Row() )]),"")) - length(substitute(concat items(:ID2[Index( 1, Row())]),""), :ID2, ""))
または
dt1 << New Column("Concat", Character, Nominal, Formula(:ID2 || char(:ID)));
dt1 << New Column("Repeat", Character, Nominal, Formula((length(concat items(:Concat[Index( 1, Row() )]),"")) - length(substitute(concat items(:Concat[ Index( 1, Row() )],""), :Concat,"")))/2)); //末尾の 2 は、連結された文字列の長さを表します
ここでは多くのことが起こっていますが、今それを説明するエネルギーはありません。ご質問がございましたら、お知らせください。実際には、上記のより実行可能で簡単な解決策があります。
Re: データテーブルの分割の問題ありがとうムシャープ、
ちなみに、以前の投稿で、@MS は次のインデックス付けの式を提供しました:Sum( :ID[Index( 1, Row() )] == :ID ) @MSインデックス付けのためにこの式を提供しました:Sum( :ID[Index( 1, Row() )] == :ID )
Re: 構文: ID によってインデックス列を作成するにはどうすればよいですか
この文脈でそれを使用する方法はありますか? 2 つのインデックス列があり、そのうちの 1 つはアルファベットですか?
最高、
ロン
Re: データテーブルの分割の問題言及されたことを組み合わせたり要約したりするだけです。 必ず事前にデータを並べ替えてください。そうしないと、Lag() 関数で問題が発生します。また、数式を使用すると、for each 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」 、
キャラクター、
「公称」 、
設定値(
{ 「あ」 、 「B」 、 「C」 、 「D」 、 「あ」 、 「B」 、 「C」 、 「C」 、 「あ」 、 「B」 、 「C」 、 「D」 、 「あ」 、 「B」 、
「C」 、 「C」 、 「C」 、 「B」 }
)
) 、
新しい列( "価値" 、
数値、
「公称」 、
フォーマット( "最高" 、 12 ) 、
設定値(
[ 111 、 222 、 333 、 444 、 111 、 222 、 333 、 555 、 111 、 222 、 555 、 444 、 111 、 222 、
555 、 666 、 777 、 888 ]
)
)
) ;
// 次のステップの数式が機能するようにテーブルを並べ替える必要があります
dt1 <<選別(テーブルを交換する、
による( : ID 、 : ID2 ) 、
注文(上昇、上昇)
) ;
// 補助列を追加します
dt1 <<新しい列( "繰り返す" 、
数値、
「公称」 、
フォーマット( "最高" 、 12 ) 、
式(もし( : ID2 !=遅れ( : ID2 、 1 ) |行() == 1 、 1 、遅れ( :繰り返す、 1 ) + 1 ) )
) ;
:繰り返す<<数式の削除; // 'for each row()' より高速
// スプリット
dt2 = dt1 <<スプリット(
分割方法( : ID2 ) 、
スプリット( :価値) 、
グループ( : ID 、 :繰り返す)
) ;
// を削除します補助カラム
dt2 <<列の削除( :繰り返す) ;
Re: データテーブルの分割の問題こんにちはセバスティアンホフマイスター、
これを試して:
dt =新しいテーブル( 「オリジナルデータ」 、
行の追加( 16 ) 、
新しい列( 「ID」 、
数値、
継続的、
フォーマット( "最高" 、 12 ) 、
設定値( [ 1 、 1 、 1 、 1 、 2 、 2 、 2 、 2 、 3 、 3 、 3 、 3 、 4 、 4 、 4 、 4 】 )
) 、
新しい列( 「ID2」 、
キャラクター、
公称、
設定値(
{ 「あ」 、 「B」 、 「C」 、 「D」 、 「あ」 、 「B」 、 「C」 、 「C」 、 「あ」 、 「B」 、 「C」 、 「D」 、 「あ」 、 「B」 、
「C」 、 「C」 }
)
) 、
新しい列( "価値" 、
数値、
継続的、
フォーマット( "最高" 、 12 ) 、
設定値(
[ 111 、 222 、 333 、 444 、 111 、 222 、 333 、 555 、 111 、 222 、 555 、 444 、 111 、 222 、
555 、 666 】
)
)
) ;
// 次のステップの数式が機能するようにテーブルを並べ替える必要があります
dt <<選別(テーブルを交換する、
による( : ID 、 : ID2 ) 、
注文(上昇、上昇)
) ;
// 重複を認識する新しいインデックスを導入します
dt <<新しい列( 「ID3」 ) ;
各行ごとに(もし( // 後で変更される可能性がある並べ替えに依存するため、列で数式を使用しないでください。
行() == 1 、 ID3 =: ID 、
: ID !=遅れ( : ID 、 1 ) | : ID2 !=遅れ( : ID2 、 1 ) 、 ID3 = : ID 、
ID3 =遅れ( : ID3 、 1 ) + 1
)) ;
// これでテーブルを分割できるようになりました
dtソート済み= dt <<スプリット(
分割方法( : ID2 ) 、
スプリット( :価値) 、
グループ( : ID3 、 : ID ) 、
出力テーブル( 「分割テーブル」 )
) ;
最高、
ロン
Re: データテーブルの分割の問題おっとっと! ごめんなさい、はい、セバスチャン。 たぶん次のようなものでしょうか?
// 補助列を追加します
待って( 3 ) ;
dt1 <<新しい列( "繰り返す" 、
数値、
「公称」 、
フォーマット( "最高" 、 12 ) 、
式(もし( : ID2 !=遅れ( : ID2 、 1 ) |行() == 1 、 1 、遅れ( :繰り返す、 1 ) + 1 ) )
) ;
Re: データテーブルの分割の問題イアンのサポートに感謝します!
多かれ少なかれそれが私がやっていたことでした。 もちろん、現実世界の問題は、データ セットに最大 3,000 行があり、繰り返し列を手動ではなく自動的に作成する式を想像できなかったことです。
それに対する解決策もご存知ですか? 「繰り返し」列を生成するために複数の for ループをネストするスクリプトの作成は避けたいと考えています。 それはとても非効率的だと思われます。
ありがとう、
セバスチャン
Re: データテーブルの分割の問題補助コラムが必要だと思います、セバスチャン。
名前デフォルトここへ( 1 ) ;
// テーブル
dt1 =新しいテーブル( 「セバスチャン」 、
行の追加( 16 ) 、
新しい列( 「ID」 、
数値、
「公称」 、
フォーマット( "最高" 、 12 ) 、
設定値( [ 1 、 1 、 1 、 1 、 2 、 2 、 2 、 2 、 3 、 3 、 3 、 3 、 4 、 4 、 4 、 4 】 )
) 、
新しい列( 「ID2」 、
キャラクター、
「公称」 、
設定値(
{ 「あ」 、 「B」 、 「C」 、 「D」 、 「あ」 、 「B」 、 「C」 、 「C」 、 「あ」 、 「B」 、 「C」 、 「D」 、 「あ」 、 「B」 、
「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 <<スプリット(
分割方法( : ID2 ) 、
スプリット( :価値) 、
グループ( : ID 、 :繰り返す)
) ;
// 補助列を削除
待って( 3 ) ;
dt2 <<列の削除( :繰り返す) ;