17. 文字列を操作する


文字列ベクトルの結合

複数の文字列を連結して一つの文字列にするには関数 paste() を用いる.引数がベクトルならばそれぞれの要素ごとに連結することになる.

 
 paste("May I", "help you ?")

[1] "May I help you ?"

 paste(month.abb, 1:12, c("st", "nd", "rd", rep("th",9)) )

[1]  "Jan 1 st"  "Feb 2 nd"  "Mar 3 rd"  "Apr 4 th"  "May 5 th" "Jun 6 th"
[7]  "Jul 7 th"  "Aug 8 th"  "Sep 9 th" "Oct 10 th" "Nov 11 th" "Dec 12 th"

R に標準で用意されている定数は LETTERS (アルファベットの大文字) ,letters (アルファベットの小文字) ,month.abb (月の名前の略称) ,month.name (月の名前) ,pi (円周率) の 5 つがある.

2 つの文字列を 1 つに結合する際,間に挟む文字列は引数 sep で指定する (空文字列 "" を与えれば何も挟まずにつなぐ) .また,ベクトルの各要素を一つにつなげた文字列を作りたいときは,引数 collapse に間に挟む文字 (列) を指定すればよい(sep と同じように 空 "" で与えてもよい).

 
 paste("/usr", "local", "bin", sep = "/")   # / を間に挟んでつなぐ

[1] "/usr/local/bin" 

 ( x <- paste(1:4) )

[1] "1" "2" "3" "4"

 paste(x, collapse="abc" )

[1] "1abc2abc3abc4"

 paste(x, collapse="" )

[1] "1234"  

部分文字列の取り出し

部分文字列を取り出す際は,関数 substring() を用いればよい.使い方は以下の通り.

 
 substring("abcdefg", 2, 5)    # substring(文字列 , 要素の最初の位置, 要素の最後の位置) 

[1] "bcde"  

文字列を R の命令として実行

関数 eval(parse(text="文字列")) とすればよい.他にも関数 eval.parent(parse(text="文字列")) が用意されている.

 
 a <- numeric(5);  x <- 1:5
 for(i in x) eval(parse(text=paste("a[",i,"] <- 10", sep="") ))
 a

[1] 10 10 10 10 10

他にも文字列に関する関数が多数用意されている.

記号

 charmatch()

 chartr()

 grep(), match()

 gsub(), sub()

意味

 部分マッチング

 文字の置換

 パターンマッチ

 置換

記号

 nchar()

 pmatch()

 toupper()

 tolower()

意味

 文字数(バイト数)

 部分マッチング

 大文字に置換

 小文字に置換

記号

 strsplit()

 strwrap()

 substr()

意味

 正規表現による文字列の分割

 文字列(英文)の分割

 部分文字列の切り出し