2012-07-04 3 views
8

Domanda correlata here.Rimozione di due caratteri da una stringa

Quindi ho un vettore di caratteri con valori di valuta che contengono sia i simboli del dollaro sia le virgole. Tuttavia, voglio provare a rimuovere sia le virgole che i simboli del dollaro nello stesso passo.

Questo rimuove i segni del dollaro =

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

Questo rimuove le virgole =

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

Mi chiedo se potevo rimuovere entrambi i personaggi in un unico passaggio.

Mi rendo conto che potrei semplicemente salvare i risultati di gsub in una nuova variabile e quindi riapplicare quella (o un'altra funzione) su quella variabile. Ma immagino che mi stia chiedendo un solo passo per fare entrambe le cose.

+2

Non sono esperto di espressioni regolari, ma forse 'gsub ('\\ $ |,', '', d)'? – joran

risposta

12

Dal rispondere nei commenti è male:

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

sostituisce sia $ o (|) , con una stringa vuota.

+0

quali sono le doppie barre posteriori per? @joran –

+1

@WhiteBig '$' è un carattere speciale nelle regex e tanto può essere sfuggito. Puoi leggere a riguardo tramite '? Regex'. – joran

+0

ok, mi sembra che R usi double // per scappare. –

3

un'occhiata a ?regexp per ulteriori notazione speciale espressione regolare:

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

Penso che rimuoverà anche il punto decimale, che sembra non essere quello che l'OP voleva. @ La risposta di joran sopra sembra farlo esattamente senza eccessiva estensione. – thelatemail

+0

@thelatemail hai ragione! Non dovrei rispondere alle domande quando c'è tequila in giro! la risposta fornita da joran è molto meglio. – Justin