1 文字列の連結
対応する順番のベクトルの要素とベクトルの要素を-
を挟んで連結します。
[1] "Noah" "William" "Frida" "Olivia"
[1] 1 2 3 4
[1] "Noah-1" "William-2" "Frida-3" "Olivia-4"
ベクトルのすべての要素を,
を挟んでひとつに連結します。
[1] "Noah" "William" "Frida" "Olivia"
対応する順番のベクトルの要素とベクトルの要素を-
を挟んで連結し、さらに、連結されたすべての要素を,
を挟んでひとつに連結します。
[1] "Noah-1,William-2,Frida-3,Olivia-4"
2 文字列と文字列の比較
==
と%in%
を覚えておけば済みそうですが、色々とあります。
[1] TRUE FALSE FALSE FALSE
[1] TRUE
[1] FALSE TRUE FALSE FALSE
[1] FALSE FALSE TRUE TRUE
[1] 1 NA NA 2
[1] 1 0 0 2
# pmatch/charmatchは最大部分一致した要素の位置を返し、matchは完全一致した要素を返す
match(person, c("Noah Smith", "Olivia Rodrigo"))
[1] NA NA NA NA
[1] 1 NA NA 2
3 正規表現によるパターンマッチング
Rでも正規表現によるテキスト処理ができます。
正規表現は、^
が行頭、$
が行末、.
が任意の1文字、[
と]
は間で指定される文字のどれか1文字、*
が直前の1文字かブロックの0回以上の繰り返し、+
が直前の1文字かブロックの0回以上の繰り返し、(
と)
がブロックの終端、\\
がこれら特殊記号をエスケープする文字です。[
と]
の間は文字を並べますが、-
で範囲指定もできます。Perl方言などまだまだ色々とありますが、だいたいこれで間に合うと思います。
[1] 1 2
[1] "This is an apple."
[1] "This is a pen."
[1] "This was a pen." "This was an apple."
置換時の括弧の中の文字列は\\1
といったエスケープ文字と数字の組み合わせで表現されることに注意しましょう。
なお、括弧自体をマッチングしたい場合は、
[1] "括弧始...)"
と言うように括弧の前にエスケープ文字をつけます。
3.1 文字列内の文字列検索
正規表現で検索文字列を指定するregexpr
が使えます。C言語ではstrstr
で文字列内の文字列を検索できますが、Rでは別の機能の関数になっており、該当する関数はありません。
[1] -1 -1 5 6
attr(,"match.length")
[1] -1 -1 1 1
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE
attr(r_re, "match.length")
で一致した長さを得ることができます。
書式の詳細を?sprintf
で確認しながら使いましょう。%d
で整数、%s
で文字列、%.3f
で小数点以下3桁まで、%%
でパーセントを表示ぐらいが良く使うところだと思います。
3.2 文字列の分割
文字列を分解することもできます。
[[1]]
[1] "Noah" "1"
[[2]]
[1] "William" "2"
[[3]]
[1] "Frida" "3"
[[4]]
[1] "Olivia" "4"
[1] "Noah" "William" "Frida" "Olivia"
[1] "1" "2" "3" "4"
デリミタとして正規表現を使うことができます。
4 文字列の切り出し
[1] "is" "is"
[1] "is a pen." "is an apple."
[1] "is" "is "