Verwendung von Spaltennamen in Schleifen<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Liebe JMP-Experten,
Ich habe eine Tabelle mit vielen sich wiederholenden Spalten:
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, ...
dh Xi, i=1, 99, Yj, j=1,20,
Wenn ich mehrere Spalten hinzufügen möchte:
C_Xi_Yj = A_Xi_Yj - B_Xi_Yj
C_?, wo C_? = A_? - B_?
Kann ich Schleife mit Xi, Yj verwenden, oder kann ich etwas noch Abstrakteres verwenden, wie: C_? = A_?-B_?
Vielen Dank,
Qian
Betreff: Verwendung von Spaltennamen in SchleifenIch brauche eine Weile, um das zu verstehen. Es ist eine sehr coole Idee.
Vielen Dank!
-------------------------------------------------- -------------------------------------------------- ------------------------------------
Für sehr große Tabellen ist wahrscheinlich eine auf Matrixoperationen basierende Lösung effizienter.
Ein Beispiel;
// Das Skript geht davon aus, dass die Spalten in der richtigen Reihenfolge sind: zuerst alle A's, dann alle B's in der gleichen Reihenfolge
//dt<
n = ncol ( dt ) ;
AB = dt << als Matrix erhalten ;
C = AB [ 0 , 1 :: n / 2 ] - AB [ 0 , n / 2 + 1 :: n ] ;
dt << Matrix setzen ( C ) ;
zum ( ich = 1 , ich <= 3 , ich ++,
zum ( j = 1 , j <= 4 , j ++,
Kol = Spalte ( n + 1 ) ; Kol << Name einsetzen ( "C_X" || verkohlen ( ich ) || "_Y" || verkohlen ( j )) ; n ++
)) ;
Betreff: Verwendung von Spaltennamen in SchleifenVielen Dank!
Dieses Evalinsert hilft wirklich. Jetzt funktioniert der Code!
Mit freundlichen Grüßen,
Qian
Betreff: Verwendung von Spaltennamen in SchleifenFür sehr große Tabellen ist wahrscheinlich eine auf Matrixoperationen basierende Lösung effizienter.
Ein Beispiel;
// Das Skript geht davon aus, dass die Spalten in der richtigen Reihenfolge sind: zuerst alle A's, dann alle B's in der gleichen Reihenfolge
//dt<
n = ncol ( dt ) ;
AB = dt << als Matrix erhalten ;
C = AB [ 0 , 1 :: n / 2 ] - AB [ 0 , n / 2 + 1 :: n ] ;
dt << Matrix setzen ( C ) ;
zum ( ich = 1 , ich <= 3 , ich ++,
zum ( j = 1 , j <= 4 , j ++,
Kol = Spalte ( n + 1 ) ; Kol << Name einsetzen ( "C_X" || verkohlen ( ich ) || "_Y" || verkohlen ( j )) ; n ++
)) ;
Betreff: Verwendung von Spaltennamen in SchleifenSehen Sie sich die Funktion Evalinsert() an. Dies kann nützlich sein, wenn Formeln angegeben werden, die z. B. von Zählern abhängen.
Beispiel mit Formelspalten:
// Beispieltabelle erstellen
dt = neuer Tisch ( "Prüfung" ) ;
zum ( ich = 1 , ich <= 3 , ich ++,
zum ( j = 1 , j <= 4 , j ++,
dt << neue Spalte ( "AXT" || verkohlen ( ich ) || "_Y" || verkohlen ( j ) , numerisch , Werte ([ 5 , 6 ]))
)) ;
zum ( ich = 1 , ich <= 3 , ich ++,
zum ( j = 1 , j <= 4 , j ++,
dt << neue Spalte ( "B_X" || verkohlen ( ich ) || "_Y" || verkohlen ( j ) , numerisch , Werte ([ 2 , 2 ]))
)) ;
// Formelspalten hinzufügen
f = Ausdruck ( analysieren ( evalinsert ( "AXT" || "^Zeichen(i)^" || "_Y" || "^char(j)^-B_X" || "^Zeichen(i)^" || "_Y" || "^Zeichen(j)^" ))) ;
zum ( ich = 1 , ich <= 3 , ich ++,
zum ( j = 1 , j <= 4 , j ++,
dt << neue Spalte ( "C_X" || verkohlen ( ich ) || "_Y" || verkohlen ( j ) , numerisch , Formel ( auswerten ( f )))
)) ;
Betreff: Verwendung von Spaltennamen in SchleifenHier sind meine fehlgeschlagenen Versuche, jemand bitte helfen:
für ( i = 1, i <= 3, i++,
für (j = 1, j <=4, j++,
col_new_name="C_"||Zeichen(i)||"_"||Zeichen(j);
Datentabelle (dt_out) << mehrere Spalten hinzufügen (col_new_name, 1, "Numeric");
parse (col_new_name) << formula ( ascolumn (parse("A_"||char(i)||"_"||char(j)) -
ascolumn (parse("B_"||char(i)||"_"||char(j)) );
);
);
Die Spalten mit korrigierten Namen werden meiner Tabelle hinzugefügt, aber die Formel ist nur wörtlich:
parse("A_"||Zeichen(i)||"_"||Zeichen(j))-parse("B_"||Zeichen(i)||"_"||Zeichen(j)
Ich habe auch eval(parse (*)) ausprobiert, ohne 'parse', ohne ascolumn usw. Keiner funktioniert.
Bitte helfen Sie.
Vielen Dank,
Qian