回答:
ここにいくつかの方法があります:
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つの列を持つデータフレームを作成します。1つはコロンの前の部分、もう1つは後の列で、後者を抽出します。
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(trimws(string, "left", "\\w"), "left", ":")
## [1] "E001" "E002" "E003"
入力string
は次のように想定されています。
string <- c("G1:E001", "G2:E002", "G3:E003")
たとえば、gsub
またはsub
gsub('.*:(.*)','\\1',string)
[1] "E001" "E002" "E003"
パーティーには遅れますが、後世のために、ストリンガーパッケージ(人気のある「tidyverse」パッケージスイートの一部)は、文字列処理のための調和された署名を持つ関数を提供します。
string <- c("G1:E001", "G2:E002", "G3:E003")
# match string to keep
stringr::str_extract(string = string, pattern = "E[0-9]+")
# [1] "E001" "E002" "E003"
# replace leading string with ""
stringr::str_remove(string = string, pattern = "^.*:")
# [1] "E001" "E002" "E003"
これは行う必要があります:
gsub("[A-Z][1-9]:", "", string)
与える
[1] "E001" "E002" "E003"
あなたが使用しているならdata.table
、それtstrsplit()
は自然な選択です:
tstrsplit(string, ":")[[2]]
[1] "E001" "E002" "E003"
unglueパッケージは代替手段を提供し、正規表現についての知識が簡単な場合のために必要とされない、ここで私たちは思います。
# install.packages("unglue")
library(unglue)
string = c("G1:E001", "G2:E002", "G3:E003")
unglue_vec(string,"{x}:{y}", var = "y")
#> [1] "E001" "E002" "E003"
reprexパッケージ(v0.3.0)によって2019-11-06に作成されました
詳細:https : //github.com/moodymudskipper/unglue/blob/master/README.md
_
セパレータとしてとするための2つの別々の変数を作った接頭辞と接尾辞@Grothendieckの回答に基づいて:prefix <- sub("_.*", "", variable)
とsuffix <- sub(".*_", "", variable)