string = c("G1:E001", "G2:E002", "G3:E003")
という文字列のリストがあるとします。コロン ":"の後の部分だけを含む文字列のベクトル、つまりsubstring = c(E001,E002,E003)
を取得したいと思います。 Rにこれをする便利な方法はありますか? substr
を使用するありがとうございます。
いくつかの方法があります。
1)sub
sub(".*:", "", string)
## [1] "E001" "E002" "E003"
2)strsplit
sapply(strsplit(string, ":"), "[", 2)
## [1] "E001" "E002" "E003"
)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
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"
追加しました。 strapplyc
およびread.dcf
ソリューション.
注意。
入力string
は次のように想定されています。
string <- c("G1:E001", "G2:E002", "G3:E003")
例えばgsub
またはsub
を使用する
gsub('.*:(.*)','\\1',string)
1] "E001" "E002" "E003"
これはもう一つの簡単な答えです
gsub("^.*:","", string)
パーティーの後半になりましたが、後世のために、stringrパッケージ(人気のある "tidyverse"パッケージの一部)は文字列処理のための調和したシグネチャを持つ関数を提供します:
string <- c("G1:E001", "G2:E002", "G3:E003")
stringr::str_extract(string = string, pattern = "E[0-9]+")
# [1] "E001" "E002" "E003"
これはする必要があります:
gsub("[A-Z][1-9]:", "", string)
与える
[1] "E001" "E002" "E003"
data.table
を使っているのなら、tstrsplit()
が自然な選択です。
tstrsplit(string, ":")[[2]]
[1] "E001" "E002" "E003"