Hallo,
Ich bin noch ein Anfänger, ich hoffe, dass ich mit diesem Problem weiter komme!
Ich habe eine wiederkehrende Spalte namens "median_range_mm", dann "median_range_mm 2" und dann "median_range_mm 3 ...".
Und eine zugehörige Spalte namens "target_status", dann "target_status_2" .....
Ich möchte eine kontinuierliche Verteilung mit allen Medianbereichen 1, 2, 3 ... im selben Fenster. ABER ich möchte alle Zellen aus einem mittleren Bereich filtern, dessen Zielstatus sich von 5 unterscheidet.
Hoffe ich bin klar. Dies ist der Code, Ich kann nicht die Bedingung des Filters für den Zielstatus in einer Schleife "für" schreiben.
dt = Current Data Table();
/renaming columns<BR />For( i = 1, i <= 716, i++,<BR /> For( j = 0, j <= 65, j++,<BR /> If(<BR /> i == 1, Column( i ) << set name( "EVENT_BEGIN_OF_CAPTURE" ),<BR /> i == 10, Column( i ) << set name( "Temperature" ),<BR /> i == 16 + 11 * j, Column( i ) << set name( "target_status" ),<BR /> i == 17 + 11 * j, Column( i ) << set name( "median_range_mm" ),<BR /> )<BR /> )<BR />)<BR /><BR />
// for the first ranging column
valMax = Max( :Temperature[dt << get rows where( :target_status == 5 )] ); //max selection
For( d = 3, d <= N Rows( dt ), d++,
val1 = Column( "Temperature" )[d];
val2 = Column( "Temperature" )[d + 1];
dt << select where( val2 - val1 <= 0.1 * valMax ); //stability
);
// plot of the first ranging
New Window( "Only plot median range with a stable temperature",
H List Box(
Distribution(
Uniform Scaling( 1 ),
Continuous Distribution(
Column( :median_range_mm ),
Show Percents( 1 ),
Show Counts( 1 ),
Customize Summary Statistics( Minimum( 1 ), Maximum( 1 ), Median( 1 ), Set Alpha Level( 0.05 ) ),
/* it is the first column so I can write : "target_status" to call the column */ <BR /><FONT face="arial black,avant garde" color="#FF9900"><STRONG> Local Data Filter( Add Filter( columns( :target_status ), Where( :target_status == 5 ) ) );</STRONG></FONT>
)
);
<BR />// looking for the first max value of the ranging
maxValue = Max( :median_range_mm[dt << get rows where( :target_status == 5 )] );
minValue = Min( :median_range_mm[dt << get rows where( :target_status == 5 )] );
// Then look on the others columns
For( p = 2, p <= 64, p++,
nom = "median_range_mm " || Char( p ); // look at ranging median_range_mm 1, 2, 3 ...
col = Column( nom );
name = "target_status " || Char( p ); // look at target status associated
tgt = Column( name );
//dt << get rows where( Column( name ) == 5); // doesn't work
<STRONG> maxValueVar = Max( Column( nom )[dt << get rows where( Column( name ) == 5 )] );
minValueVar = Min( Column( nom )[dt << get rows where( Column( name ) == 5 )] );</STRONG>
If(
maxValueVar > maxValue, maxValue = maxValueVar,
minValueVar < minValue, minValue = minValueVar
);
);
For( g = 2, g <= 64, g++,
nom = "median_range_mm " || Char( g );
col = Column( nom );<BR /> /* there is difficutie*/<BR /><FONT face="arial black,avant garde" color="#FF9900"><STRONG> name = "target_status " || Char( g );
tgt = Column( name );</STRONG></FONT>
valueMax = Max( :Temperature );
For( h = 3, h <= N Rows( dt ), h++,
value1 = Column( "Temperature" )[h];
value2 = Column( "Temperature" )[h + 1];
dt << select where( value2 - value1 <= 0.1 * valueMax ); // this is for a plot with a stable temperature
);
Distribution(
Uniform Scaling( 1 ),
Continuous Distribution(
Column( col ),
Show Percents( 1 ),
Show Counts( 1 ),
Customize Summary Statistics( Minimum( 1 ), Maximum( 1 ), Median( 1 ), Set Alpha Level( 0.05 ) ),<BR /> /* there is the difficultie*/<BR /> /* I don't want to call all the columns " target_status 2 , 3 , 4 .... */ <BR /><FONT face="arial black,avant garde" color="#FF9900"><STRONG> Local Data Filter(
Add Filter( columns( Column( tgt ), Where( Column( tgt ) == 5 ) ) );</STRONG></FONT>
)
)
);
);
)
);
Prost
Einige allgemeine Ideen ...
Erstens denke ich, dass der Datenfilter ein wunderbares Gerät ist, wenn eine interaktive Manipulation der Zeilenzustände erforderlich ist. In Ihrem Fall scheint es jedoch so zu sein, dass Zeilenzustände statt durch die expliziten Schleifen gesteuert werden. Daher würde ich die Zeilenstatus direkt mit dem Skript und nicht mit einem Filter bearbeiten.
Zweitens können Sie einen beliebigen booleschen Ausdruck als Argument für die Datentabellenachricht verwenden. << Select Where (Boolean). Folgen Sie dieser Nachricht mit der << Nachricht ausschließen. Der Zeilenstatus bestimmt, dass Ihre Plattform (z. B. Distribution) diese Beobachtungen nicht enthält.
Drittens kann die Plattformstartnachricht ein Where-Argument (Boolean) enthalten, das bei diesem Problem von Nutzen sein kann.
Schließlich bin ich nicht sicher über den Zweck der beiden Schleifen in der Funktion New Window (). Es ist wahrscheinlich am besten, sie außerhalb der Funktion zu verschieben und die Append () - Nachricht zu verwenden, um dem Fenster weitere Plattformen hinzuzufügen.