Salut,
Je suis toujours un débutant, j'espère que je vais progresser avec ce problème!
J'ai une colonne récurrente nommée "median_range_mm" puis "median_range_mm 2" puis "median_range_mm 3 ..."
Et une colonne associée appelée "target_status" puis "target_status_2" .....
Je voudrais tracer une distribution continue avec toutes les gammes médianes 1, 2, 3 ... sur la même fenêtre. MAIS je veux filtrer toute la cellule d’une plage médiane qui a un statut cible différent de 5.
J'espère que je suis clair. C'est le code, Je ne sais pas comment écrire la condition de filtre pour le statut de la cible dans une boucle "pour".
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>
)
)
);
);
)
);
À votre santé
Quelques idées générales ...
Premièrement, je pense que le filtre de données est un outil formidable lorsque la manipulation interactive des états de ligne est requise. Il semble cependant que dans votre cas, les états des lignes sont contrôlés à la place par les boucles explicites. Je manipulerais donc directement les états des lignes avec le script, pas un filtre.
Deuxièmement, vous pouvez utiliser n’importe quelle expression booléenne comme argument du message de la table de données << Sélectionnez Where (Boolean). Suivez ce message avec le message << Exclude. L'état de la ligne déterminera que votre plate-forme (Distribution, par exemple) n'inclura pas ces observations.
Troisièmement, le message de lancement de la plate-forme peut inclure un argument Where (booléen) qui pourrait être utile dans ce problème.
Enfin, je ne suis pas sûr du but des deux boucles de la fonction New Window (). Il est probablement préférable de les déplacer en dehors de la fonction et d'utiliser le message Append () pour ajouter plus de plates-formes à la fenêtre.