jnobuyukiのブログ

研究していて困ったことやその解決に関するメモ。同じように困ったあなたのために。twitter ID: @j_nobuyuki

R言語で区切り文字による文字列の分割

今回は、区切り文字を指定して、文字列を分割してリスト化する方法を紹介します。

strsplit関数

strsplit関数を使うと任意の文字を区切り文字として、文字列を分割できます。例えば以下のように使います。

input <- "abc def ghi"
res <- strsplit(input, " ")

区切り文字は正規表現

区切り文字はスペースやタブ(\t)などを指定しますが、実は、正規表現の扱いになっています。なので、+(1文字以上の繰り返し)のような表現を加えると、スペースやタブスペースが連続して入っている箇所を1回の区切りとして扱えます。

#abcの後にはスペースが一つ、defの後にはスペースが2つ入っています。
input2 <- "abc def  ghi"

res2 <- strsplit(input2, " ")
#これだとabc, def,その後に空要素、そしてhgiが続きます。

res3 <- strsplit(input2, " +")
#これだとabc, def, hgiだけになります。スペース2文字を区切り文字扱いするので、空要素ができません。

unlist関数でリスト内容にアクセス

strsplit関数の出力結果は、リストオブジェクトです。このオブジェクトだと、要素数が1で、分割した文字列にアクセスできません。そこでunlist関数を利用して、出力結果を配列にします。

input <- "abc def ghi"
res <- strsplit(input, " ")
length(res)#1がかえります
res2 <- unlist(res)
length(res2)#3がかえります。インデックスで[1]から[3]を指定すると各要素にアクセスできます。