Cuente el número de ocurrencias de palabras específicas en una cadenaHola, estoy buscando crear una nueva columna en mi conjunto de datos que cuente la cantidad de veces que aparece una palabra específica en una cadena. Las palabras están separadas por "*" en cada fila.
Tabla de ejemplo:
Lista de animales
1 perro*perro*gato*pájaro*perro
2 perro*perro*gato*pájaro*perro*perro
La salida debe ser
Lista de animales Número de perros
1 perro*perro*gato*pájaro*perro 3
2 perro*perro*gato*pájaro*perro*perro 4
Puede proporcionar información adicional si es necesario.
Re: Contar el número de ocurrencias de palabras específicas en una cadenaN Rows( Loc( Words( :Column 1, "*" ), "dog" ) ) +
N Rows( Loc( Words( :Column 1, "*" ), "cat" ) )
Re: Contar el número de ocurrencias de palabras específicas en una cadenaHola,
¿Cómo cambiaría la función para contar el número de ocurrencias de perros y gatos?
Probé el Or, pero esto no funciona correctamente.
Gracias
Onjai
Re: Contar el número de ocurrencias de palabras específicas en una cadenaMe gusta ese ultimo! Parece que realmente funcionará hasta 16 bits; 17 consecutivos no se pueden almacenar en un número de doble precisión. El operador :: crea una matriz, y hay muchas matemáticas de matriz después de eso.
La función de las palabras podría ser la mejor para uso general... siendo fácil de explicar...
Re: Contar el número de ocurrencias de palabras específicas en una cadenaDos alternativas más.
Utilizar el Palabras() función con una cadena vacía como delimitador:
b = 111001010;
N Row(Loc(Words(Char(b), ""), "1"));
O simplemente con matemáticas (es decir, sin convertir el número en cadena). Por ejemplo:
b = 111001010;
Sum(Mod(Round(b / 10 ^ (Floor(Log10(b + 1)) :: 0)), 10));
Re: Contar el número de ocurrencias de palabras específicas en una cadenaPor favor encuentre una de las alternativas. Ejecute el script para hacer una tabla.
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: Contar el número de ocurrencias de palabras específicas en una cadenaParece que sus datos son numéricos (¡base 10 ya!), por lo que es posible que deba usar char (valor) para volver a una representación de cadena.
Re: Contar el número de ocurrencias de palabras específicas en una cadenaMuchas maneras de hacer esto. Aquí hay 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 línea 1 es solo una forma de obtener el código ASCII para el carácter ASCII "1", devuelto en una matriz de 1 elemento.
La línea 2 es similar, pero obtiene una matriz más grande y la compara con el código deseado, lo que da como resultado el valor del comentario de la línea 3.
La línea 4 solo suma los elementos.
Re: Contar el número de ocurrencias de palabras específicas en una cadenaHola
¿Qué pasa si no hay un delimitador, por ejemplo, me gustaría contar cuántos "1" hay en una cadena binaria 111001010?
¿Cómo puedo obtener los resultados como este?

Gracias
Re: Contar el número de ocurrencias de palabras específicas en una cadenaPuedo confirmar que la función Loc() no es específica de JMP Pro. Está disponible en JMP.
Re: Contar el número de ocurrencias de palabras específicas en una cadenaLa documentación de JMP 13 no indica que la función LOC() sea solo una función de JMP Pro.Lo validaría ejecutando el ejemplo de la función LOC() en el índice de secuencias de comandos
Ayuda==>Índice de secuencias de comandos
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: Contar el número de ocurrencias de palabras específicas en una cadena¿La función Loc() existe solo en JMP Pro?
¿Hay alguna forma de contar palabras o símbolos específicos en una cadena en JMP normal?
@txnelson escribió:
Esta es la fórmula para contar el número de veces que aparece "perro" en una columna dada
N Rows( Loc( Words( :Column 1, "*" ), "dog" ) )

Re: Contar el número de ocurrencias de palabras específicas en una cadenaLa siguiente fórmula encontrará todos los elementos que contengan la cadena "perro".
wordList=words(st,"*");
count=0;for(i=1,i<=n items(wordList),i++,count=sum(count,contains(wordList[i],"dog")));
count;
Re: Contar el número de ocurrencias de palabras específicas en una cadena¿Cómo funcionaría esto para palabras comodín? Por ejemplo, si perro tuviera perro1 y otro dijera perro2? Todavía me gustaría que contara todas las palabras de perros.
Re: Contar el número de ocurrencias de palabras específicas en una cadena¡¡Gracias!!Re: Contar el número de ocurrencias de palabras específicas en una cadenaEsta es la fórmula para contar el número de veces que aparece "perro" en una columna dada
N Rows( Loc( Words( :Column 1, "*" ), "dog" ) )

Re: Contar el número de apariciones de palabras específicas en una cadenaMuchas gracias, @ian_jmp .
En realidad, no esperaba que Longitud - Longitud fuera 4 veces más rápida que N filas (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: Contar el número de apariciones de palabras específicas en una cadenaComo no recordaré el truco en 6 meses, y como no quiero invertir tiempo en contárselo a todos los colegas, intenté configurar una función personalizada:
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");desafortunadamente:

¿Cómo tengo que ajustar la función personalizada para que sea tan rápida como la versión original de @ian_jmp ?
[eliminar If(...) ayuda un poco, pero ¿cómo conseguirlo <1s?]