Усечь строку из определенного символа в R

У меня есть список строк в R, который выглядит так:

WDN.TO
WDR.N
WDS.AX
WEC.AX
WEC.N
WED.TO

Я хочу получить весь постфикс строк, начиная с символа ".", результат должен выглядеть так:

.TO
.N
.AX
.AX
.N
.TO

У кого-нибудь есть идеи?

Ответы

Ответ 1

Решение Joshua работает отлично. Я бы использовал 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"

Ответ 2

Использование 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"

Ответ 3

Strsplit может это сделать, но если набор данных слишком велик, он покажет ошибку индекс за пределами

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