web-dev-qa-db-fra.com

tronquer la chaîne d'un certain caractère dans R

J'ai une liste de chaînes dans R qui ressemble à:

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

Je veux obtenir tous les postfixes des chaînes à partir du caractère ".", Le résultat devrait ressembler à ceci:

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

Quelqu'un a des idées?

16
user802231

La solution de Joshua fonctionne bien. J'utiliserais cependant sub au lieu de gsub. gsub sert à remplacer plusieurs occurrences d'un motif dans une chaîne - sub correspond à une occurrence. Le motif peut aussi être simplifié:

> x <- c("WDN.TO","WDR.N","WDS.AX","WEC.AX","WEC.N","WED.TO")
> sub("^[^.]*", "", x)
[1] ".TO" ".N"  ".AX" ".AX" ".N"  ".TO"

... Mais si les chaînes sont aussi régulières que dans la question, il suffit alors de supprimer les 3 premiers caractères:

> x <- c("WDN.TO","WDR.N","WDS.AX","WEC.AX","WEC.N","WED.TO")
> substring(x, 4)
[1] ".TO" ".N"  ".AX" ".AX" ".N"  ".TO"
18
Tommy

Utilisation de gsub:

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

Utilisation de 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"
13
Joshua Ulrich

Strsplit peut le faire, mais si le jeu de données est trop volumineux, il affichera une erreur En indice en dehors des limites.

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
0
Aayush Agrawal