截断R中某个字符的字符串

use*_*231 19 string truncate r

我在R中有一个字符串列表,如下所示:

WDN.TO
WDR.N
WDS.AX
WEC.AX
WEC.N
WED.TO
Run Code Online (Sandbox Code Playgroud)

我想从字符"."开始获取字符串的所有后缀,结果应如下所示:

.TO
.N
.AX
.AX
.N
.TO
Run Code Online (Sandbox Code Playgroud)

有人有主意吗?

Tom*_*mmy 20

约书亚的解决方案很好.我会用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"
Run Code Online (Sandbox Code Playgroud)

...但是如果字符串与问题中的字符串一样规则,那么简单地剥离前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"
Run Code Online (Sandbox Code Playgroud)

  • 这是一个正则表达式模式.第一个`^`匹配字符串的开头,但方括号中的下一个否定,所以它匹配除"."之外的所有字符. - 最后星星意味着匹配任意次数 - 所以匹配从开始到(但不包括)第一个点的所有内容.然后第二个参数用空字符串替换该匹配. (2认同)

Jos*_*ich 13

使用gsub:

x <- c("WDN.TO","WDS.N")
# replace everything from the start of the string to the "." with "."
gsub("^.*\\.",".",x)
# [1] ".TO" ".N" 
Run Code Online (Sandbox Code Playgroud)

使用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"
Run Code Online (Sandbox Code Playgroud)