[解決済み] パターンに従って部分文字列を抽出する
質問
文字列のリストがあるとします。
string = c("G1:E001", "G2:E002", "G3:E003")
ここで、コロン ":" の後の部分のみを含む文字列のベクトルを得たいと思います、すなわち
substring = c(E001,E002,E003)
.
Rでこれを行うための便利な方法はありますか?使用方法
substr
?
解決方法は?
ここでは、いくつかの方法を紹介します。
1) サブ
sub(".*:", "", string)
## [1] "E001" "E002" "E003"
2) strsplit
sapply(strsplit(string, ":"), "[", 2)
## [1] "E001" "E002" "E003"
3) read.table
read.table(text = string, sep = ":", as.is = TRUE)$V2
## [1] "E001" "E002" "E003"
4) 部分文字列
これは、2番目の部分が常に4文字目から始まることを想定しています(質問の例ではそうなっています)。
substring(string, 4)
## [1] "E001" "E002" "E003"
4a) 部分文字列/正規表現
もし、コロンが常に既知の位置にない場合は、(4)を検索して修正することができます。
substring(string, regexpr(":", string) + 1)
5)ストラップリク
strapplyc
は括弧で囲まれた部分を返します。
library(gsubfn)
strapplyc(string, ":(.*)", simplify = TRUE)
## [1] "E001" "E002" "E003"
6) read.dcf
これは、コロンより前の部分文字列が一意である場合のみ機能します(質問の例ではそうなっています)。 また、セパレータがコロンであることも必要です(質問ではコロンになっています)。 もし別のセパレータを使うのであれば、次のようになります。
sub
を最初にコロンに置き換えてください。 例えば、セパレータが
_
すると
string <- sub("_", ":", string)
c(read.dcf(textConnection(string)))
## [1] "E001" "E002" "E003"
7) 分離
7a)
使用方法
tidyr::separate
のように、コロンの前の部分と後の部分の2列からなるデータフレームを作成し、後者を抽出する。
library(dplyr)
library(tidyr)
library(purrr)
DF <- data.frame(string)
DF %>%
separate(string, into = c("pre", "post")) %>%
pull("post")
## [1] "E001" "E002" "E003"
7b)
交互に
separate
を作成するためだけに使用することができます。
post
列を作成し、その後
unlist
と
unname
を実行すると、結果のデータフレームが表示されます。
library(dplyr)
library(tidyr)
DF %>%
separate(string, into = c(NA, "post")) %>%
unlist %>%
unname
## [1] "E001" "E002" "E003"
8)トリミング
を使用することができます。
trimws
を使って単語を左から切り落とし、さらにそれを使ってコロンを切り落とす。
trimws(trimws(string, "left", "\\w"), "left", ":")
## [1] "E001" "E002" "E003"
備考
入力
string
が想定されています。
string <- c("G1:E001", "G2:E002", "G3:E003")
関連
-
[解決済み] MACアドレスの正規表現とは何ですか?
-
[解決済み] 正規表現で変数を使うには?
-
[解決済み] Kibanaクエリの完全一致
-
[解決済み] Regex - ハイフンはエスケープされるべきか?重複
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み] データフレーム列の名前によるドロップ
-
[解決済み] 非常に大きなテーブルをデータフレームとして高速に読み込む
-
[解決済み] ある部分文字列のすべての出現箇所を見つけるにはどうすればよいですか?
-
[解決済み】data.table vs dplyr:一方がうまくできない、またはうまくできないことを行うことができますか?
-
[解決済み】文字列を分割しても、区切り文字を維持する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Regex オプション文字にマッチさせる方法
-
[解決済み] Regex:最初に出現する文字までのマッチング
-
[解決済み] 正規表現で複数の単語を任意の順序で並べる [重複]。
-
[解決済み] /bb|[^b]{2}/ どのように機能するのですか?[クローズド]
-
[解決済み] 最初のマッチで停止する正規表現
-
[解決済み] Regexオプショングループ
-
[解決済み] URLにセミコロンが含まれていても、有効なのでしょうか?
-
[解決済み] 標準的な10桁の電話番号にマッチする正規表現
-
[解決済み] 正規表現ネガティブルックアヘッド
-
[解決済み] awk で gsub を使ってファイル中の ("./") と (".txt") の文字を検索・置換する方法