テキストデーター内に1~100までの正の整数サンプル値が500個くらい散らばっている。
1.サンプル値の総和を求める→これはいいマクロを発見したので解決済み
2.例えば、サンプル値の中から20以下のものを抜き出し・・・
3.空白文字に置き換えたい(そうして最終的には足切り総和値を求めたい)
2の段階でどうしたものか迷っています。自分としてはこれ以上の本格的な統計作業は必要としていないので統計ソフトRのようなものはオーバークオリティだと思います。理数系の方なら「こんなのこれの機能使ってこうこうやれば簡単じゃん」とか答えてくれるのではないか、と甘い期待をして質問させていただきます。よろしくお願いします。
簡単なところだと20以下を正規表現で消してしまうのでしょうか。
元のデータ形式がわかりませんけれど、正規表現としては以下のような感じでしょうか。
(^|[ \t])0*(1?[0-9]|20)(?=[ \t]|$)
(\s)0*(1?[0-9]|20)(?=\s)
replaceall "(^|[ \\t])0*(1?[0-9]|20)(?=[ \\t]|$)"," ", regular;
replaceall "(\\s)0*(1?[0-9]|20)(?=\\s)","\\1", regular;
Hidemaru.exe /xtotal.mac c:\path\to\data.txt
と思ったら、(^|[ \t])0*(1?[0-9]|20)(?=[ \t]|$)の20の部分を10に変更しても10~20まで空白化してしまいます。どうしたものでしょうか??とほ
2012/06/25 09:40:18正規表現というのは数値でなく文字として処理します。
「(1?[0-9]|20)」のうち、「1?[0-9]」の部分が0~19に相当します。
「[0-9]」が0~9いずれか1文字をあらわし、「1?」が1があるときとないとき両方を表します。
「20」は20のみを表します。
前の「(^|[ \t])0*」が、行頭または空白またはタブ、そのあとに0個以上の0という意味です。
後ろの「(?=[ \t]|$)」が、行末または空白またはタブを表します。
以下いろいろパターン
- 0~9
- (^|[ \t])0*[0-9](?=[ \t]|$)
- 0~19
- 0~9の前に1がついたときもOKにする
- (^|[ \t])0*1?[0-9](?=[ \t]|$)
- 0~25
- 0~19と20~25に分けて考える
- (^|[ \t])0*(1?[0-9]|2[0-5])(?=[ \t]|$)
- 1~9
- (^|[ \t])0*[1-9](?=[ \t]|$)
- 1~19
- 1~9と10~19に分けて考える
- (^|[ \t])0*([1-9]|1[0-9])(?=[ \t]|$)
- または1~9の前に1がついたときもOKと、10に分けて考える
- (^|[ \t])0*(1?[1-9]|10)(?=[ \t]|$)
- 3~15
- 3~9と10~15に分けて考える
- (^|[ \t])0*([3-9]|1[0-5])(?=[ \t]|$)
- 6~44
- 6~9と10~39と40~44に分けて考える
- (^|[ \t])0*([6-9]|[1-3][0-9]|4[0-4])(?=[ \t]|$)
- 0~44
- 0~39と40~44に分けて考える
- (^|[ \t])0*([1-3]?[0-9]|4[0-4])(?=[ \t]|$)
2012/06/27 20:40:59