2012-07-04 3 views
8

Question connexe here. J'ai donc un vecteur de caractères avec des valeurs monétaires qui contiennent à la fois des signes dollar et des virgules. Cependant, je veux essayer d'enlever les virgules et les signes du dollar dans la même étape.Suppression de deux caractères d'une chaîne

Cela supprime des signes dollar =

d = c("$0.00", "$10,598.90", "$13,082.47") 
gsub('\\$', '', d) 

Cela supprime des virgules =

library(stringr) 
str_replace_all(c("10,0","tat,y"), fixed(c(","), "") 

Je me demande si je pouvais enlever les deux personnages en une seule étape. Je réalise que je pourrais simplement enregistrer les résultats de gsub dans une nouvelle variable, puis réappliquer cela (ou une autre fonction) sur cette variable. Mais je suppose que je m'interroge sur une seule étape pour faire les deux.

+2

Je ne suis pas un expert en regex, mais peut-être 'gsub ('\\ $ |,', '', d)'? – joran

Répondre

12

Depuis répondre dans les commentaires est mauvais:

gsub('\\$|,', '', d) 

remplace soit $ ou (|) , avec une chaîne vide.

+0

à quoi servent les doubles barres obliques? @joran –

+1

@WhiteBig '$' est un caractère spécial dans les regex et tellement échapper. Vous pouvez lire à ce sujet via '? Regex'. – joran

+0

ok, il me semble que R utilise double // pour s'échapper. –

3

jeter un oeil à ?regexp pour la notation regex spécial supplémentaire:

> gsub('[[:punct:]]', '', d) 
[1] "000"  "1059890" "1308247" 
+0

Je pense que cela enlèvera le point décimal, ce qui ne semble pas être ce que l'OP voulait. réponse @ joran ci-dessus semble le faire exactement sans trop de portée. – thelatemail

+0

@thelatemail tu as raison! Je ne devrais pas répondre aux questions quand il y a de la tequila! la réponse fournie par joran est beaucoup mieux. – Justin

Questions connexes