Helfen Sie mit Spaltenformeln basierend auf Spaltenpositionen?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Ich habe eine Liste von Zeichenfolgen, die Spaltennamen sind. Ich möchte deren Spaltenposition (i) in einer Datentabelle ermitteln und dann eine neue Spalte mit der Formel (Spalte (i) + Spalte (i + 1)) hinzufügen. Mein Code sieht so aus:
| EIN | B | C | D | E | F |
|---|
1 | 2 | 3 | 4 | 5 | 6 |
| 1 | 2 | 3 | 4 | 5 | 6 |
| 1 | 2 | 3 | 4 | 5 | 6 |
cols = dt << Get Column Names (St
Ring);
list = {"B", "D"};
n = N Elemente (Liste);
locate = {}:
Für (i = 1, i <= n, i ++,
Lokalisieren = Loc (dt, Liste );
Neue Spalte ("Neu", Formel (Spalte) ) + Spalte (lokalisieren + 1)))
);
Ich habe Probleme, weil Loc () eine Matrix zurückgibt und Column () nur eine Zahl auswerten kann. Ich möchte, dass meine endgültige Datentabelle folgendermaßen aussieht:
| EIN | B | C | D | E | F | Neu | Neu 2 |
|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
Kann mir jemand helfen?
Re: Hilfe mit der Spaltenformel basierend auf den Spaltenpositionen?Danke für deine Hilfe. Ich weiß das wirklich zu schätzen.
Re: Hilfe mit der Spaltenformel basierend auf den Spaltenpositionen?Eine Formelspalte funktioniert natürlich nicht, wenn abhängige Spalten entfernt werden. Wenn Sie die Spalten löschen möchten, die von der Formel verwendet werden, wozu werden Spaltenformeln an erster Stelle verwendet? Wenn Sie nur nach der Summe suchen und nicht an den dynamischen Vorteilen einer Spaltenformel interessiert sind, schlage ich vor, dass Sie keine Formeln verwenden.
Versuchen Sie dies auf dem Tisch oben:
Liste = { "B" . "D" } ;
Lokalisieren = Ausdruck ( Loc ( Cols . Liste [ ich ] ) [ 1 ] ) ;
Zum ( ich = 1 . ich <= N Artikel ( Liste ) . ich ++
Cols = dt << Spaltennamen abrufen ( String ) ;
col = dt << Neue Spalte ( "Neu" . numerisch ) ;
Für jede Reihe ( col [] = Säule ( Lokalisieren ) [] + Säule ( Lokalisieren + 1 ) [] ) ;
dt << Spalten löschen ( Säule ( Lokalisieren ) . Säule ( Lokalisieren + 1 ) ) ;
col << Name einsetzen ( Liste [ ich ] ) ;
) ;
Re: Hilfe mit der Spaltenformel basierend auf den Spaltenpositionen?Ich danke dir sehr! Dieser Ansatz funktioniert sehr gut.
Ich habe auch eine Anschlussfrage. Ich möchte einige Änderungen an den Spalten dieser neuen Tabelle vornehmen:
| EIN | B | C | D | E | F | Neu | Neu 2 |
|---|
1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
Gibt es eine Möglichkeit, die 4 Spalten zu entfernen, die summiert wurden, um die Spalten "New" und "New 2" zu erstellen, und sie mit list = {"B", "D"} umbenennen, sodass die resultierende Tabelle wie folgt aussieht:
Re: Hilfe mit der Spaltenformel basierend auf den Spaltenpositionen?Spaltenvariablen über jsl in Spaltenformeln zu bekommen, ist nicht einfach. Die Formel muss genau wie der endgültige Ausdruck aussehen, dh es wird nichts automatisch ausgewertet. Der Trick besteht darin, Ausdrücke (oder Strings) zu definieren und zu bearbeiten und dann die richtige Kombination aus eval, parse usw. zu verwenden.
Unten ist ein Beispiel, das zu funktionieren scheint. Es ist etwas kreisförmig, da es die Spalten anhand des Namens lokalisiert und dann den Namen erneut erhält, der dann analysiert wird. Bank! Ich könnte kein einfacheres Verfahren finden, ist aber interessiert, wenn jemand eine elegantere Lösungsidee hat.
// Die Beispieltabelle erstellen
dt = Neue Tabelle ( "Prüfung" .
Zeilen hinzufügen ( 3 ) .
Neue Spalte ( "EIN" . Numerisch . Kontinuierlich . Format ( "Beste" . 1 ) . Werte setzen ( [ 1 . 1 . 1 ] ) ) .
Neue Spalte ( "B" . Numerisch . Kontinuierlich . Format ( "Beste" . 12 ) . Werte setzen ( [ 2 . 2 . 2 ] ) ) .
Neue Spalte ( "C" . Numerisch . Kontinuierlich . Format ( "Beste" . 12 ) . Werte setzen ( [ 3 . 3 . 3 ] ) ) .
Neue Spalte ( "D" . Numerisch . Kontinuierlich . Format ( "Beste" . 12 ) . Werte setzen ( [ 4 . 4 . 4 ] ) ) .
Neue Spalte ( "E" . Numerisch . Kontinuierlich . Format ( "Beste" . 12 ) . Werte setzen ( [ 5 . 5 . 5 ] ) ) .
Neue Spalte ( "F" . Numerisch . Kontinuierlich . Format ( "Beste" . 12 ) . Werte setzen ( [ 6 . 6 . 6 ] ) )
) ;
// Das Skript beginnt hier
Cols = dt << Spaltennamen abrufen ( String ) ;
Liste = { "B" . "D" } ;
// Suchen Sie den Spaltenausdruck
Lokalisieren = Ausdruck ( Loc ( Cols . Liste [ ich ] ) [ 1 ] ) ;
// Neue Spalte mit Formelausdruck
f = Ausdruck ( Neue Spalte ( "Neu" . Formel ( Ausdruck ( Parse ( Säule ( Lokalisieren ) << Name bekommen ) )
+ Ausdruck ( Parse ( Säule ( Lokalisieren + 1 ) << Name bekommen ) ) ) ) ) ;
// Liste überlaufen
Zum ( ich = 1 . ich <= N Artikel ( Liste ) . ich ++
Eval ( Eval Expr ( f ) )
) ;