文字列を繋げるときには、paste()
, paste0()
, str_c()
などを使う。
paste()
とpaste0()
は、Rの標準パッケージ(base)。
str_c()
は、stringrパッケージの関数。
str_cの方が使いやすいけど、小規模のプロジェクトではbaseのpasteで十分。
baseとstringrの違いの詳細は、下記参照。
Rで文字列操作を行う際に、標準パッケージ(baseパッケージ)やstringrパッケージを使っていることが多いと思う。 私の周囲にはstringrを好む人が多いけれども、実際、どちらを使った方がよいのか、調べてみた。 R …
前回、R標準パッケージ(base)とstringrパッケージの比較をしてみて、「処理速度は、場合によってはbase、場合によってはstringrの方が速い」ということがわかった。 で、具体的にどのときにbase、どのとき …
以下、それぞれの使い方と、使用例、ポイントの比較等のまとめ。
paste()
paste()
は、文字列を結合する最も基本的な関数。スペース(" ")がデフォルトの区切り文字として使われる。
paste(文字列1, 文字列2, ..., sep = "区切り文字")
使い方色々
- 区切り文字を指定する
- 区切り文字なしで結合する
- ベクトルとの結合
etc...
基本的な使い方
v <- paste("A", "B", 1)
print(v)
output
result: "A B 1"
区切り文字を指定する
v <- paste("A", "B", 1, sep = "-")
print(v)
output
result: "A-B-1"
例3:区切り文字なしで結合する
v <- paste("A", "B", 1, sep = "")
print(v)
output
result: "AB1"
例4:ベクトルとの結合
v <- paste("A", "B", 1:3, sep = "_")
print(v)
output
result: "A_B_1" "A_B_2" "A_B_3"
paste0()
paste0()
は、paste()
の省略形。区切り文字を指定せず、すべてを隙間なく結合する。
つまり、paste(sep = "")
と同じ動作をするイメージ。
paste0(文字列1, 文字列2, ...)
使い方色々
- 基本的な使い方
- ベクトルとの結合
基本的な使い方
v <- paste0("A", "B", 1)
print(v)
output
result: "AB1"
ベクトルとの結合
v <- paste0("A", "B", 1:3)
print(v)
output
result: "AB1" "AB2" "AB3"
※paste0()
はpaste(sep = "")
と同じ機能を持つため、余分な記述が不要。
なので、区切り文字が不要な場合はpaste0()
を使うと簡単に記述できる。
str_c()(stringr::str_c)
str_c()
は、stringrパッケージの関数なので、最初にstringrパッケージを読み込む必要がある。
library("stringr")
機能はpaste0()
と似ている……けれども、NAの扱い方が異なる。
→ NA
を無視して結合したい場合には、str_c()
が便利。
str_c(文字列1, 文字列2, ..., sep = "区切り文字", na.rm = TRUE)
使い方色々
- 基本的な使い方
- NAを含むデータの結合
- NAを無視した結合
基本的な使い方
v <- str_c("A", "B", 1) # sepはデフォルトで区切りなし
print(v)
output
result: "AB1"
NAを含むデータの結合
v <- str_c("A", NA, "B", sep = "-")
print(v)
output
result: "A-NA-B"
NAを無視した結合
v <- str_c("A", NA, "B", sep = "-", na.rm = TRUE)
print(v)
output
result: "A-B"
それぞれの関数の比較
それぞれの関数を比較すると、以下のような感じ。
関数 | デフォルト区切り | NAの処理 | ベクトルの動作 | 便利な機能 |
---|---|---|---|---|
paste() |
スペース | NAは結果全体をNAに | すべての要素がベクトル化 | sep で区切り指定可能 |
paste0() |
区切りなし | NAは結果全体をNAに | すべての要素がベクトル化 | 簡潔な書き方 |
str_c() |
区切りなし | NAを無視できる | すべての要素がベクトル化 | NA無視 (na.rm = TRUE) |
それぞれの関数の使い所は、以下のようなイメージ。
paste()
→ スペースまたは指定した文字でつなげたいとき。paste0()
→ 区切りなしで結合したいとき。str_c()
→ NAが含まれる文字列の結合や、NAの無視を行いたいとき。
……普段使いには str_c()が便利だと思う。