Contare il numero di occorrenze di parole specifiche in una stringaCiao, sto cercando di creare una nuova colonna nel mio set di dati che conta il numero di volte in cui una parola specifica appare in una stringa. Le parole sono separate da "*" in ogni riga.
Tabella di esempio:
Elenco degli animali
1 cane*cane*gatto*uccello*cane
2 cane*cane*gatto*uccello*cane*cane
L'uscita dovrebbe essere
Conteggio dei cani della lista degli animali
1 cane*cane*gatto*uccello*cane 3
2 cane*cane*gatto*uccello*cane*cane 4
Può fornire ulteriori informazioni se necessario.
Ri: contare il numero di occorrenze di parole specifiche in una stringaN Rows( Loc( Words( :Column 1, "*" ), "dog" ) ) +
N Rows( Loc( Words( :Column 1, "*" ), "cat" ) )
Ri: contare il numero di occorrenze di parole specifiche in una stringaCIAO,
Come cambierei la funzione per contare il numero di occorrenze sia di cane che di gatto?
Ho provato l'O, ma questo non funziona correttamente.
Grazie
Onjai
Ri: contare il numero di occorrenze di parole specifiche in una stringaMi piace quest'ultimo! Sembra che funzionerà effettivamente fino a 16 bit; 17 numeri consecutivi non possono essere memorizzati in un numero a doppia precisione. L'operatore :: crea una matrice, e dopo c'è molta matematica matriciale.
Le parole funzione potrebbero essere le migliori per un uso generale...essendo facili da spiegare...
Ri: contare il numero di occorrenze di parole specifiche in una stringaAltre due alternative.
Usa il Parole() funzione con una stringa vuota come delimitatore:
b = 111001010;
N Row(Loc(Words(Char(b), ""), "1"));
O semplicemente con la matematica (cioè senza convertire il numero in stringa). Per esempio:
b = 111001010;
Sum(Mod(Round(b / 10 ^ (Floor(Log10(b + 1)) :: 0)), 10));
Ri: contare il numero di occorrenze di parole specifiche in una stringaSi prega di trovare una delle alternative. Esegui lo script per creare una tabella.
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 )
)
)Ri: contare il numero di occorrenze di parole specifiche in una stringaSembra che i tuoi dati siano numerici (già base 10!) Quindi potresti dover usare char(value) per riportarli a una rappresentazione di stringa.
Ri: contare il numero di occorrenze di parole specifiche in una stringaMolti modi per farlo. Eccone uno.
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 riga 1 è solo un modo per ottenere il codice ASCII per il carattere ASCII "1", restituito in una matrice di 1 elemento.
La riga 2 è simile, ma ottiene un array più grande e lo confronta con il codice desiderato, ottenendo il valore nel commento della riga 3.
La riga 4 somma solo gli elementi.
Ri: contare il numero di occorrenze di parole specifiche in una stringaCIAO
Cosa succede se non c'è un delimitatore, ad esempio vorrei contare quanti "1" in una stringa binaria 111001010?
Come posso ottenere risultati di questo tipo?

Grazie
Ri: contare il numero di occorrenze di parole specifiche in una stringaPosso confermare che la funzione Loc() non è specifica di JMP Pro. È disponibile in JMP.
Ri: contare il numero di occorrenze di parole specifiche in una stringaLa documentazione per JMP 13 non indica che la funzione LOC() è solo una funzione di JMP Pro.Lo convaliderei eseguendo l'esempio di funzione LOC() nell'indice di scripting
Aiuto==>Indice degli script
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] )
);Ri: contare il numero di occorrenze di parole specifiche in una stringaLa funzione Loc() esiste solo in JMP Pro?
C'è un modo per contare parole o simboli specifici in una stringa in JMP normale?
@txnelson ha scritto:
Ecco la formula per contare il numero di volte che "cane" appare in una data colonna
N Rows( Loc( Words( :Column 1, "*" ), "dog" ) )

Ri: contare il numero di occorrenze di parole specifiche in una stringaLa seguente formula troverà tutti gli elementi con la stringa "dog" trovata al suo interno
wordList=words(st,"*");
count=0;for(i=1,i<=n items(wordList),i++,count=sum(count,contains(wordList[i],"dog")));
count;
Ri: contare il numero di occorrenze di parole specifiche in una stringaCome funzionerebbe per le parole jolly? Ad esempio, se cane avesse cane1 e un altro dicesse cane2? Vorrei ancora che contasse tutte le parole del cane.
Ri: contare il numero di occorrenze di parole specifiche in una stringaGrazie!!Ri: contare il numero di occorrenze di parole specifiche in una stringaEcco la formula per contare il numero di volte che "cane" appare in una data colonna
N Rows( Loc( Words( :Column 1, "*" ), "dog" ) )

Re: contare il numero di occorrenze di parole specifiche in una stringamolte grazie, @ian_jmp .
In realtà, non mi aspettavo che Length - Length fosse 4 volte più veloce di N righe(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: contare il numero di occorrenze di parole specifiche in una stringaDato che non ricorderò il trucco tra 6 mesi e non voglio investire tempo per raccontarlo a tutti i colleghi, ho provato a impostare una funzione personalizzata:
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");Purtroppo:

Come devo regolare la funzione personalizzata per renderla veloce quanto la versione originale di @ian_jmp ?
[rimuovere If(...) aiuta un po', ma come ottenerlo < 1s?]