ループでの列名の使用<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />JMP エキスパートの皆様
多くの繰り返し列を持つテーブルがあります。
A_X1_Y1、A_X1_Y2、....A_X1_Y99、A_X2_Y1、A_X2_Y99、...
B_X1_Y1、B_X1_Y2、....B_X1_Y99、B_X2_Y1、B_X2_Y99、...
すなわち、Xi、i=1、99、Yj、j=1、20、
複数の列を追加する場合:
C_Xi_Yj = A_Xi_Yj - B_Xi_Yj
C_?、ここで C_? = A_? -B_?
Xi、Yj でループを使用できますか、それとも C_ のようなさらに抽象的なものを使用できますか? = A_?-B_?
ありがとう、
銭
Re: ループで列名を使用するこれを理解するにはしばらく時間がかかります。 とてもクールなアイデアです。
ありがとう!
-------------------------------------------------- -------------------------------------------------- ------------------------------------
非常に大きなテーブルの場合、行列演算に基づくソリューションがおそらくより効率的です。
例;
// スクリプトは列が正しい順序であると仮定します: 最初にすべての A が、次にすべての B が同じ順序で
//dt<<名前で並べ替える;
n = ncol ( dt ) ;
AB = dt <<行列として取得;
ハ= AB [ 0 、 1 :: n / 2 ] - AB [ 0 、 n / 2 + 1 :: n ] ;
dt <<行列を設定(ハ) ;
為に(私= 1 、私<= 3 、私++、
為に( j = 1 、 j <= 4 、 j ++、
列=桁( n + 1 ) ;列<<セット名( 「C_X」 ||チャー(私) || "_Y" ||チャー( j ))) ; n ++
))) ;
Re: ループで列名を使用するありがとう!
この evalinsert は本当に役に立ちます。 これでコードが機能するようになりました!
よろしくお願いします、
銭
Re: ループで列名を使用する非常に大きなテーブルの場合、行列演算に基づくソリューションがおそらくより効率的です。
例;
// スクリプトは列が正しい順序であると仮定します: 最初にすべての A が、次にすべての B が同じ順序で
//dt<<名前で並べ替える;
n = ncol ( dt ) ;
AB = dt <<行列として取得;
ハ= AB [ 0 、 1 :: n / 2 ] - AB [ 0 、 n / 2 + 1 :: n ] ;
dt <<行列を設定(ハ) ;
為に(私= 1 、私<= 3 、私++、
為に( j = 1 、 j <= 4 、 j ++、
列=桁( n + 1 ) ;列<<セット名( 「C_X」 ||チャー(私) || "_Y" ||チャー( j ))) ; n ++
))) ;
Re: ループで列名を使用する関数 Evalinsert() を確認してください。 カウンターなどに依存する数式を指定するときに役立ちます。
数式列の例:
// サンプルテーブルを作成
dt =新しいテーブル( "テスト" ) ;
為に(私= 1 、私<= 3 、私++、
為に( j = 1 、 j <= 4 、 j ++、
dt <<新しい列( "斧" ||チャー(私) || "_Y" ||チャー( j ) 、数値、値([ 5 、 6 ]))
))) ;
為に(私= 1 、私<= 3 、私++、
為に( j = 1 、 j <= 4 、 j ++、
dt <<新しい列( 「B_X」 ||チャー(私) || "_Y" ||チャー( j ) 、数値、値([ 2 、 2 ]))
))) ;
// 数式列を追加
へ=式(解析する(エバリンサート( "斧" || "^char(i)^" || "_Y" || "^char(j)^-B_X" || "^char(i)^" || "_Y" || "^char(j)^" )))) ;
為に(私= 1 、私<= 3 、私++、
為に( j = 1 、 j <= 4 、 j ++、
dt <<新しい列( 「C_X」 ||チャー(私) || "_Y" ||チャー( j ) 、数値、方式(評価(へ))))
))) ;
Re: ループで列名を使用するこれが私の失敗した試験です、誰か助けてください:
for ( i = 1, i <= 3, i++,
( j = 1、j <=4、j++、
col_new_name="C_"||char(i)||"_"||char(j);
データ テーブル (dt_out) << 複数の列を追加 (col_new_name, 1, "Numeric");
parse (col_new_name) << 数式 ( ascolumn (parse("A_"||char(i)||"_"||char(j)) -
ascolumn (parse("B_"||char(i)||"_"||char(j)) );
);
);
名前が修正された列がテーブルに追加されますが、式は文字通り次のとおりです。
parse("A_"||char(i)||"_"||char(j))-parse("B_"||char(i)||"_"||char(j)
また、「parse」なし、ascolumnなしなどでeval(parse(*))を試しましたが、何も機能していません。
助けてください。
ありがとう、
銭