« [R]行列から特定の行か特定の列のみ取り出す | トップページ | [R]文字列の指定した一部を取得する »

2022年7月10日 (日)

[R]文字列を特定の文字または文字列で分割する

strsplit関数を使う。分割する文字列はベクトルで与えることができる。戻りはリスト。分割させる文字または文字列は正規表現で与えることができる。

> s <- c("A B C", " D E  F ")
> strsplit(s, " ")
[[1]]
[1] "A" "B" "C"
[[2]]
[1] "" "D" "E" "" "F"

上記の例では1つの空白(0x20)で分割しようとしたが、ベクトルの2番目の要素は与えた文字列の先頭や最後に空白が含まれており、間の空白も1文字とは限らないので、分割がうまくいっていない。このような場合はあらかじめ前後の空白をtrimws関数で取り除き、分割パターンは正規表現で「[ ]+」(1つ以上の連続した空白(0x20))を与えればよい。

> strsplit(trimws(s), "[ ]+")
[[1]]
[1] "A" "B" "C"
[[2]]
[1] "D" "E" "F"

strsplitの戻り値はリストであり、これをベクトルにする場合はunlist関数を使う。

> unlist(strsplit(trimws(s), "[ ]+"))
[1] "A" "B" "C" "D" "E" "F"

規則性なく空白が含まれるCSVの文字列の場合は、以下のような分割パターンを正規表現で与えれば、うまく分割することができる。

> s <- " A, B,C "
> strsplit(trimws(s), "[ ,]+")
[[1]]
[1] "A" "B" "C"

« [R]行列から特定の行か特定の列のみ取り出す | トップページ | [R]文字列の指定した一部を取得する »

R(文字と文字列)」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« [R]行列から特定の行か特定の列のみ取り出す | トップページ | [R]文字列の指定した一部を取得する »

無料ブログはココログ

■■

■■■