İşte birkaç yol:
1) alt
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) alt dize
Bu, ikinci kısmın her zaman 4. karakterden başladığını varsayar (sorudaki örnekte durum budur):
substring(string, 4)
## [1] "E001" "E002" "E003"
4a) alt dize / normal ifade
İki nokta üst üste her zaman bilinen bir konumda olmasaydı, arayarak (4) 'ü değiştirebilirdik:
substring(string, regexpr(":", string) + 1)
5) strapplyc
strapplyc parantez içindeki kısmı döndürür:
library(gsubfn)
strapplyc(string, ":(.*)", simplify = TRUE)
## [1] "E001" "E002" "E003"
6) read.dcf
Bu, yalnızca iki nokta üst üste işaretinden önceki alt dizeler benzersizse çalışır (sorudaki örnekte bunlar). Ayrıca ayırıcının iki nokta üst üste olmasını gerektirir (soruda bu vardır). Farklı bir ayırıcı kullanıldıysa, subonu önce iki nokta üst üste ile değiştirebilirdik. Örneğin, ayırıcı o _zamanstring <- sub("_", ":", string)
c(read.dcf(textConnection(string)))
## [1] "E001" "E002" "E003"
7) ayrı
7a) Kullanarak tidyr::separateiki sütunlu bir veri çerçevesi oluşturuyoruz, biri kolondan önceki kısım ve diğeri sonraki kısım için ve sonra ikincisini çıkarıyoruz.
library(dplyr)
library(tidyr)
library(purrr)
DF <- data.frame(string)
DF %>%
separate(string, into = c("pre", "post")) %>%
pull("post")
## [1] "E001" "E002" "E003"
7b) Alternatif olarak separate, yalnızca postsütunu ve ardından unlistve unnameelde edilen veri çerçevesini oluşturmak için kullanılabilir :
library(dplyr)
library(tidyr)
DF %>%
separate(string, into = c(NA, "post")) %>%
unlist %>%
unname
## [1] "E001" "E002" "E003"
8) trimws Biz kullanabilirsiniz trimwsnokta üst üste kırpmak için yeniden kullanmak daha sonra sol kapalı süs kelime karakterlerine ve.
trimws(trimws(string, "left", "\\w"), "left", ":")
## [1] "E001" "E002" "E003"
Not
Girişin stringşu şekilde olduğu varsayılır:
string <- c("G1:E001", "G2:E002", "G3:E003")
_ayırıcı olarak bulunan ve @Grothendieck cevabına göre önek ve sonek için iki ayrı değişken oluşturan bir değişkenim vardı :prefix <- sub("_.*", "", variable)vesuffix <- sub(".*_", "", variable)