次年度予算を積算しておりますが、例えば以下のようなテキスト入力用のフォームから数値のみを抽出して合計する関数を検討。
ハードディスク 20千円
研究打合せ旅費(東京−仙台、1回、2泊3日、1人)50千円
研究打合せ旅費(東京−京都、1回、2泊3日、1人)50千円
library(stringr) text1 <- read.table("clipboard",header=F,sep="|",fill=T) #クリップボードを読むので一旦、上記コマンドをペーストしてから、 #クリップボードにコピーして↑ボタンで履歴を呼び出すのが楽 #その後以下をペースト text2 <- sapply(text1,function(x){sub("\\(.+?\\)","",x)})#半角括弧内の削除 text2 <- sub("\\(.+?\\)","",text2)#全角括弧内を削除 extrnum <- str_extract_all(text2[,], "[0-9.]+")#数値抽出 extnumstr <- sapply(extrnum,as.numeric)#数値化 do.call(rbind,extnumstr)#行列に結合、複数列あるとおかしな結果になっていることが分かる。 sum(unlist(extnumstr),na.rm=T)#合計値算出 write(unlist(extnumstr),"clipboard",sep="\t")#値をクリップボードにもコピーするので、貼り付けられる。
追記:あいばさんより、もっと便利な方法を教えていただきました。ありがとうございます。
perl=TRUEにして、先読みを使うと #千円の直前の半角数字を抽出 get.price <- function(str) as.numeric(regmatches(str, regexpr("[0-9]+(?=千円)", str, perl=TRUE))) sapply(text1, get.price)