İş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, sub
onu ö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::separate
iki 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 post
sütunu ve ardından unlist
ve unname
elde 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 trimws
nokta ü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)