обрезать строку до определенного символа в R [дубликат]
этот вопрос уже есть ответ здесь:
у меня есть список строк в R, который выглядит так:
WDN.TO
WDR.N
WDS.AX
WEC.AX
WEC.N
WED.TO
Я хочу получить все постфиксы строк, начиная с символа"."результат должен выглядеть например:
.TO
.N
.AX
.AX
.N
.TO
у кого-нибудь есть идеи?
3 ответов
решение Джошуа работает нормально. Я использую sub
вместо gsub
хотя. gsub
предназначен для замены нескольких вхождений шаблона в строку -sub
для одного случая. Шаблон также можно немного упростить:
> x <- c("WDN.TO","WDR.N","WDS.AX","WEC.AX","WEC.N","WED.TO")
> sub("^[^.]*", "", x)
[1] ".TO" ".N" ".AX" ".AX" ".N" ".TO"
...Но если строки так же регулярны, как в вопросе, то просто зачистки первых 3 символов должно быть достаточно:
> x <- c("WDN.TO","WDR.N","WDS.AX","WEC.AX","WEC.N","WED.TO")
> substring(x, 4)
[1] ".TO" ".N" ".AX" ".AX" ".N" ".TO"
используя gsub
:
x <- c("WDN.TO","WDS.N")
# replace everything from the start of the string to the "." with "."
gsub("^.*\.",".",x)
# [1] ".TO" ".N"
используя strsplit
:
# strsplit returns a list; use sapply to get the 2nd obs of each list element
y <- sapply(strsplit(x,"\."), `[`, 2)
# since we split on ".", we need to put it back
paste(".",y,sep="")
# [1] ".TO" ".N"
Strsplit может сделать это, но в случае, если набор данных слишком велик, он покажет ошибку subscript out of bounds
x <- c("WDN.TO","WDR.N","WDS.AX","WEC.AX","WEC.N","WED.TO")
y <- strsplit(x,".")[,2]
#output y= TO N AX AX N TO