« [R]リストの各要素に一括で関数を適用する | トップページ | [R]リストから要素を取り出す »

2024年2月16日 (金)

[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]リストの各要素に一括で関数を適用する | トップページ | [R]リストから要素を取り出す »

無料ブログはココログ

■■

■■■