[R]strsplit関数とstr_split関数の動作の違い
strsplit関数とstringrパッケージのstr_split関数は、どちらも正規表現を使用して文字列を分割する関数だが、動作が若干異なる。以下の例のとおり、分割に指定した文字が文字列の最後に存在すると、strsplit関数はその最後の分割された文字列("")を返すことを省略するので注意。どちらも戻り値はリストである。
> s <- character(5)
> s[1] <- "//ウマ娘/アグネスデジタル/鈴木みのり"
> s[2] <- "/ウマ娘/ライスシャワー/石見舞菜香"
> s[3] <- "ウマ娘/メイショウドトウ/和多田美咲"
> s[4] <- "ウマ娘/サクラチヨノオー/野口瑠璃子/"
> s[5] <- "ウマ娘/メジロアルダン/会沢紗弥//"
> strsplit(s, "/")
[[1]]
[1] "" "" "ウマ娘" "アグネスデジタル" "鈴木みのり"
[[2]]
[1] "" "ウマ娘" "ライスシャワー" "石見舞菜香"
[[3]]
[1] "ウマ娘" "メイショウドトウ" "和多田美咲"
[[4]]
[1] "ウマ娘" "サクラチヨノオー" "野口瑠璃子"
[[5]]
[1] "ウマ娘" "メジロアルダン" "会沢紗弥" ""
> stringr::str_split(s, "/")
[[1]]
[1] "" "" "ウマ娘" "アグネスデジタル" "鈴木みのり"
[[2]]
[1] "" "ウマ娘" "ライスシャワー" "石見舞菜香"
[[3]]
[1] "ウマ娘" "メイショウドトウ" "和多田美咲"
[[4]]
[1] "ウマ娘" "サクラチヨノオー" "野口瑠璃子" ""
[[5]]
[1] "ウマ娘" "メジロアルダン" "会沢紗弥" "" ""
どちらの関数も、分割する文字列の指定に正規表現を使うことができる。
> s <- character(3)
> s[1] <- "ウオッカ/大橋彩香"
> s[2] <- "ゴールドシチー//香坂さき"
> s[3] <- "スーパークリーク///優木かな"
> str_split(s, "/+")
[[1]]
[1] "ウオッカ" "大橋彩香"
[[2]]
[1] "ゴールドシチー" "香坂さき"
[[3]]
[1] "スーパークリーク" "優木かな"
> strsplit(s, "/+")
[[1]]
[1] "ウオッカ" "大橋彩香"
[[2]]
[1] "ゴールドシチー" "香坂さき"
[[3]]
[1] "スーパークリーク" "優木かな"
str_split_1関数は機能はほぼ同じで戻り値がベクトルになる関数。ただし、要素数が1つのベクトルしか扱うことができない。
> str_split_1(s, "/+")
Error in `str_split_1()`:
! `string` must be a single string, not a character vector.
Run `rlang::last_trace()` to see where the error occurred.
> str_split_1(s[1], "/+")
[1] "ウオッカ" "大橋彩香"
« [R]リストの各要素に一括で関数を適用する | トップページ | [R]リストから要素を取り出す »
「R(文字と文字列)」カテゴリの記事
- [R]同じ文字列を繰り返した文字列を作成する(2026.02.02)
- [R]文字列が数値に変換できるかどうか判定する(2025.12.31)
- [R]文字列の長さを得る(2025.12.30)
- [R]空白を追加した指定の長さの文字列を得る(2025.12.26)
- [R]文字列型ベクトルの要素を連結して文字列を作る(2025.12.17)

コメント