Trouver le motif répétitif le plus longSalut,
Quelqu'un peut-il expliquer comment trouver le motif répétitif le plus long dans une colonne ?
Par exemple, supposons que j'ai le tableau suivant :

Le motif ayant la plus grande taille est : "1 5 6 8 7", et il apparaît 3 fois dans cette colonne. Notez qu'il existe un autre modèle dans le tableau ("1 5 6"), qui apparaît 5 fois, mais qui n'est pas le plus grand.
J'ai essayé avec Screening - Explore patterns, et bien qu'il renvoie les valeurs les plus dupliquées, je ne parviens pas à obtenir le modèle exact. Ou plusieurs modèles, avec le nombre d'occurrences.
Peut-être y a-t-il une option que je devrais activer ? Ou dois-je utiliser une autre plateforme ? Ou si quelqu'un peut m'aider avec un script JSL.
Merci
Automatisation et scriptsPersonnalisation de masseRe : Trouver le motif répétitif le plus longSalut @ruskicar ,
Une option possible est de regarder la plate-forme "Explore pattern", accessible via Analyze, Screening, Explore pattern comme vous le mentionnez.
Si vous cliquez sur le triangle rouge à côté de "Colonne 1" dans la fenêtre de la plate-forme, vous avez la possibilité de "Sélectionner les séquences en double les plus longues". Il mettra en surbrillance dans votre table de données 16 lignes, correspondant à 2 fois la séquence "1 5 6 8 7 1 5 6", qui est la plus longue séquence répétitive que vous avez dans votre ensemble de données, et non "1 5 6 8 7".
J'espère que cette réponse vous aidera,
Re : Trouver le motif répétitif le plus long@Victor_G parfait.
J'ai écrit ce JSL et je n'étais pas satisfait de la réponse qu'il fournit qui inclut des doublons qui se chevauchent.
// build a sample table
dtElements = New Table( "elements", New Column( "element", Numeric, setvalues( J( 20, 1, Random Integer( 1, 3 ) ) ) ) );
nr = N Rows( dtElements );
// build key table
maxKeyLen = 12; // too big will be slow, too small will miss something
dtKeys = New Table( "keys", addrows( nr ), New Column( "key", expression, Set Display Width( 239 ) ) );
For( irow = 1, irow <= nr, irow += 1,
maxrow = Min( nr, irow + maxKeyLen );
dtKeys:key[irow] = dtElements:element[irow :: maxrow];
);
// sort key table to put similar together
dtKeys << Sort( By( :key ), Replace Table, Order( Ascending ) );
// get the match length of adjacent rows
// ===========================================
// this code finds two runs of 1,1,1 in 1,1,1,1 <<<<<<<<<< IMPORTANT <<<<<<<<<<<
// ===========================================
dtKeys << New Column( "matchLength" );
For( irow = 2, irow <= nr, irow += 1,
a = dtKeys:key[irow];
b = dtKeys:key[irow - 1];
result = Min( N Items( a ), N Items( b ) );
For Each( {{aa, bb}, i}, across( a, b, Count( "Shortest" ) ),
If( aa != bb,
result = i - 1;
Break();
)
);
dtKeys:matchLength[irow] = result;
);
dtKeys << Sort( By( :matchLength ), Replace Table, Order( Descending ) );
Show( dtKeys:key[1][1 :: dtKeys:matchLength[1]] );
La JSL utilise une colonne Expression, ForEach( Across, Count ) et gère à la fois la saisie numérique et la saisie de caractères. Mais je ne pense pas que ça fera quoi @ruskicar veut.
L'idée est de créer une nouvelle colonne de valeurs construite à partir des N lignes suivantes. Le tri de cette colonne place les séries de motifs de départ similaires adjacentes.
Re : Trouver le motif répétitif le plus longOui, merci, c'est ce que je cherchais. L'exemple était un peu moche je vois, mais la réponse est correcte
. Trop de triangles rouges, donc je n'ai pas repéré cette option
.