文字列内の特定の単語の出現数をカウントします。こんにちは。文字列内に特定の単語が出現する回数をカウントする新しい列をデータセットに作成しようとしています。 各行の単語は「*」で区切られます。
テーブルの例:
動物一覧
1 犬*犬*猫*鳥*犬
2犬*犬*猫*鳥*犬*犬
出力は次のようになります
動物リスト 犬の数
1 犬*犬*猫*鳥*犬 3
2犬*犬*猫*鳥*犬*犬 4
必要に応じて追加情報を提供できます。
Re: 文字列内の特定の単語の出現数をカウントするN Rows( Loc( Words( :Column 1, "*" ), "dog" ) ) +
N Rows( Loc( Words( :Column 1, "*" ), "cat" ) )
Re: 文字列内の特定の単語の出現数をカウントするやあ、
犬と猫の両方の出現数をカウントするように関数を変更するにはどうすればよいですか?
Or を試してみましたが、正しく動作しません。
ありがとう
オンジャイ
Re: 文字列内の特定の単語の出現数をカウントする最後のやつが好きです! 実際には 16 ビットまで動作するようです。連続する 17 個を倍精度数値に格納することはできません。 :: 演算子は行列を作成し、その後に多くの行列計算が必要になります。
説明が簡単なので、一般的に使用するには Word 関数が最適かもしれません。
Re: 文字列内の特定の単語の出現数をカウントするさらに 2 つの選択肢があります。
使用言葉()空の文字列を区切り文字として使用する関数:
b = 111001010;
N Row(Loc(Words(Char(b), ""), "1"));
または、数学のみを使用します (つまり、数値を文字列に変換せずに)。 例えば:
b = 111001010;
Sum(Mod(Round(b / 10 ^ (Floor(Log10(b + 1)) :: 0)), 10));
Re: 文字列内の特定の単語の出現数をカウントする代替手段の 1 つを見つけてください。 スクリプトを実行してテーブルを作成します。
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: 文字列内の特定の単語の出現数をカウントするデータは数値のようです (すでに基数 10!) ので、文字列表現に戻すには char(value) を使用する必要があるかもしれません。
Re: 文字列内の特定の単語の出現数をカウントするこれを行うには多くの方法があります。 ここに 1 つあります。
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);
行 1 は、1 要素の行列で返される ASCII 文字「1」の ASCII コードを取得するための単なる方法です。
行 2 も同様ですが、より大きな配列を取得して目的のコードと比較し、結果として行 3 のコメントの値が得られます。
4 行目は要素を加算するだけです。
Re: 文字列内の特定の単語の出現数をカウントするやあ
区切り文字がない場合はどうなるでしょうか。たとえば、バイナリ文字列 111001010 に「1」が何個あるかを数えたいとします。
どうすればこのような結果を得ることができますか?

ありがとう
Re: 文字列内の特定の単語の出現数をカウントするLoc() 関数が JMP Pro に固有のものではないことが確認できました。 JMPで利用可能です。
Re: 文字列内の特定の単語の出現数をカウントするJMP 13 のドキュメントには、LOC() 関数が単なる JMP Pro 関数であるとは記載されていません。Scripting Index の LOC() 関数の例を実行してそれを検証します。
ヘルプ==>スクリプトインデックス
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: 文字列内の特定の単語の出現数をカウントするLoc() 関数は JMP Pro にのみ存在しますか?
通常のJMPで文字列内の単語や特定の記号を数える方法はありますか?
@txnelson書きました:
特定の列に「犬」が出現する回数を数える式は次のとおりです。
N Rows( Loc( Words( :Column 1, "*" ), "dog" ) )

Re: 文字列内の特定の単語の出現数をカウントする次の式は、文字列「dog」を含むすべてのアイテムを検索します。
wordList=words(st,"*");
count=0;for(i=1,i<=n items(wordList),i++,count=sum(count,contains(wordList[i],"dog")));
count;
Re: 文字列内の特定の単語の出現数をカウントするこれはワイルドカード単語ではどのように機能するでしょうか? たとえば、犬が「犬 1」と言い、別の犬が「犬 2」と言ったらどうでしょうか? 私はそれでも、犬の言葉をすべてカウントしてもらいたいと思っています。
Re: 文字列内の特定の単語の出現数をカウントするありがとう!!Re: 文字列内の特定の単語の出現数をカウントする特定の列に「犬」が出現する回数を数える式は次のとおりです。
N Rows( Loc( Words( :Column 1, "*" ), "dog" ) )

Re: 文字列内の特定の単語の出現数をカウントするありがとう、 @ian_jmp 。
実際、 Length - Length がN rows(Loc ()) よりも 4 倍高速になるとは予想していませんでした...
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: 文字列内の特定の単語の出現数をカウントするこのトリックは 6 か月も経てば覚えていないでしょうし、同僚全員に教えるのに時間を費やしたくないので、カスタム関数をセットアップしてみました。
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");残念ながら:

@ian_jmpによるオリジナル バージョンと同じ速度になるようにカスタム関数を調整するにはどうすればよいですか?
[If(...) を削除すると少し役立ちますが、1 秒未満にするにはどうすればよいですか?]