Compter le nombre d'occurrences de mots spécifiques dans une chaîneBonjour, je cherche à créer une nouvelle colonne dans mon jeu de données qui compte le nombre de fois qu'un mot spécifique apparaît dans une chaîne. Les mots sont séparés par "*" dans chaque ligne.
Exemple de tableau :
Liste des animaux
1 chien*chien*chat*oiseau*chien
2 chien*chien*chat*oiseau*chien*chien
La sortie doit être
Liste des animaux Nombre de chiens
1 chien*chien*chat*oiseau*chien 3
2 chien*chien*chat*oiseau*chien*chien 4
Peut fournir des informations supplémentaires si nécessaire.
Re : Compter le nombre d'occurrences de mots spécifiques dans une chaîneN Rows( Loc( Words( :Column 1, "*" ), "dog" ) ) +
N Rows( Loc( Words( :Column 1, "*" ), "cat" ) )
Re : Compter le nombre d'occurrences de mots spécifiques dans une chaîneSalut,
Comment changer la fonction pour compter le nombre d'occurrences de chien et de chat ?
J'ai essayé le Or, mais cela ne fonctionne pas correctement.
Merci
Onjaï
Re : Compter le nombre d'occurrences de mots spécifiques dans une chaîneJ'aime bien ce dernier ! Il semble que cela fonctionnera réellement jusqu'à 16 bits; 17 uns consécutifs ne peuvent pas être stockés dans un nombre à double précision. L'opérateur :: crée une matrice, et il y a beaucoup de calculs matriciels après cela.
La fonction des mots pourrait être la meilleure pour un usage général... étant facile à expliquer...
Re : Compter le nombre d'occurrences de mots spécifiques dans une chaîneDeux autres alternatives.
Utilisez le Mots() fonction avec une chaîne vide comme délimiteur :
b = 111001010;
N Row(Loc(Words(Char(b), ""), "1"));
Ou simplement avec les mathématiques (c'est-à-dire sans convertir le nombre en chaîne). Par exemple:
b = 111001010;
Sum(Mod(Round(b / 10 ^ (Floor(Log10(b + 1)) :: 0)), 10));
Re : Compter le nombre d'occurrences de mots spécifiques dans une chaîneVeuillez trouver l'une des alternatives. Exécutez le script pour créer un tableau.
New Table( "Counting Ones",
Add Rows( 5 ),
New Column( "Number",
Numeric,
"Continuous",
Format( "Best", 17 ),
Set Values( [111000010100001, 10101, 11111, 0, 101010101] ),
Set Display Width( 132 )
),
New Column( "Count of One",
Numeric,
"Ordinal",
Format( "Best", 12 ),
Formula(
Length( Char( :Number ) ) - Length(
Substitute( Char( :Number ), "1", "" )
)
),
Set Display Width( 102 )
)
)Re : Compter le nombre d'occurrences de mots spécifiques dans une chaîneIl semble que vos données soient numériques (base 10 déjà !), vous devrez donc peut-être utiliser char(value) pour les ramener à une représentation sous forme de chaîne.
Re : Compter le nombre d'occurrences de mots spécifiques dans une chaîneDe nombreuses façons de le faire. En voici un.
ASCIIcode = blobtomatrix(chartoblob("1"),"int",1,"big")[1]; // 49
intermediate=blobtomatrix(chartoblob("0101111001010"),"int",1,"big")==ASCIIcode;
// intermediate=[0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0]
sum(intermediate);
La ligne 1 est juste un moyen d'obtenir le code ASCII pour le caractère ASCII "1", renvoyé dans une matrice de 1 élément.
La ligne 2 est similaire, mais obtient un tableau plus grand et le compare au code souhaité, ce qui donne la valeur dans le commentaire de la ligne 3.
La ligne 4 additionne simplement les éléments.
Re : Compter le nombre d'occurrences de mots spécifiques dans une chaîneSalut
Que se passe-t-il s'il n'y a pas de délimiteur, par exemple, je voudrais compter combien de "1" dans une chaîne binaire 111001010 ?
Comment puis-je obtenir des résultats comme celui-ci?

Merci
Re : Compter le nombre d'occurrences de mots spécifiques dans une chaîneJe peux confirmer que la fonction Loc() n'est pas spécifique à JMP Pro. Il est disponible dans JMP.
Re : Compter le nombre d'occurrences de mots spécifiques dans une chaîneLa documentation de JMP 13 n'indique pas que la fonction LOC() est uniquement une fonction JMP Pro.Je validerais cela en exécutant l'exemple de fonction LOC() dans l'index de script
Aide==>Index des scripts
Names Default To Here( 1 );
Show( Loc( [1 0 1 0 1 0] ) );
Show( Loc( {"A", 2, 3, 2, 5, 2, 4, [1 5]}, 2 ) );
Show(
Loc( {"A", 2, 3, 2, 5, 2, 4, [1 5]}, [1 5] )
);Re : Compter le nombre d'occurrences de mots spécifiques dans une chaîneLa fonction Loc() existe-t-elle uniquement dans JMP Pro ?
Existe-t-il un moyen de compter les mots ou les symboles spécifiques d'une chaîne dans JMP standard ?
@txnelson écrit:
Voici la formule pour compter le nombre de fois que "chien" apparaît dans une colonne donnée
N Rows( Loc( Words( :Column 1, "*" ), "dog" ) )

Re : Compter le nombre d'occurrences de mots spécifiques dans une chaîneLa formule suivante trouvera tous les éléments contenant la chaîne "chien"
wordList=words(st,"*");
count=0;for(i=1,i<=n items(wordList),i++,count=sum(count,contains(wordList[i],"dog")));
count;
Re : Compter le nombre d'occurrences de mots spécifiques dans une chaîneComment cela fonctionnerait-il pour les mots génériques ? Par exemple, si chien avait chien1 et un autre dit chien2 ? Je voudrais toujours qu'il compte tous les mots de chien.
Re : Compter le nombre d'occurrences de mots spécifiques dans une chaîneMerci!!Re : Compter le nombre d'occurrences de mots spécifiques dans une chaîneVoici la formule pour compter le nombre de fois que "chien" apparaît dans une colonne donnée
N Rows( Loc( Words( :Column 1, "*" ), "dog" ) )

Re : Compter le nombre d'occurrences de mots spécifiques dans une chaînemerci beaucoup, @ian_jmp .
En fait, je ne m'attendais pas à ce que Longueur - Longueur soit 4x plus rapide que N lignes (Loc ())...
dt = Open( "$SAMPLE_DATA/Wafer Stacked.jmp" );
// Recode column: Lot_Wafer Label
Local( {dt},
dt = Data Table( "Wafer Stacked" );
dt << Begin Data Update;
For Each Row(
dt,
dt:Lot_Wafer Label[] = Substitute( dt:Lot_Wafer Label, "1", "xxx_" )
);
dt << End Data Update;
);
dt_long=dt << Concatenate(dt,dt,dt,dt);
t0=hptime();
dt_long <<NEW column=""></NEW>Re : Compter le nombre d'occurrences de mots spécifiques dans une chaîneComme je ne me souviendrai plus de l'astuce dans 6 mois - et comme je ne veux pas investir du temps pour la raconter à tous mes collègues, j'ai essayé de mettre en place une fonction personnalisée :
Add Custom Functions(
New Custom Function(
"test",
"countWord",
Function( {myString, myWord},
If( Length( myWord ) > 0,
Return( (Length( myString ) - Length( Substitute( myString, myWord, "" ) )) / Length( myWord ) ),
Return( 0 )
)
),
<<DESCRIPTION></DESCRIPTION><BR />t0=hptime();<BR />dt_long << new column("new", set each value(test:countWord(:Lot_Wafer Label,"xxx")));<BR />Write ("via custom function:\!t",(hptime() - t0)/1000000,"s\!n");malheureusement:

Comment dois-je ajuster la fonction personnalisée pour la rendre aussi rapide que la version originale de @ian_jmp ?
[supprimer le If(...) aide un peu - mais comment l'obtenir < 1s ?]