web-dev-qa-db-fra.com

Convertir une devise avec des virgules en numérique

J'ai une colonne dans une trame de données comme suit:

COL1
$54,345
$65,231
$76,234

Comment puis-je le convertir en ceci:

COL1
54345
65231
76234

La façon dont je l'ai essayé au début était:

df$COL1<-as.numeric(as.character(df$COL1))

Cela n'a pas fonctionné car cela a indiqué que les NA ont été introduits.

Ensuite, je l'ai essayé comme ceci:

df$COL1<-as.numeric(gsub("\\$","",as.character(df$COL1)))

Et la même chose s'est produite.

Des idées?

19
Nick

La raison pour laquelle le gsub ne fonctionnait pas était qu'il y avait , dans la colonne, qui n'est toujours pas numérique. Ainsi, lors de la conversion en "numérique" avec as.numeric, tous les éléments non numériques sont convertis en NA. Nous devons donc supprimer les deux , et $ pour le faire fonctionner.

df1$COL1 <- as.numeric(gsub('[$,]', '', df1$COL1))

Nous faisons correspondre le $ et , entre crochets ([$,]) afin qu'il soit considéré comme ce caractère ($ laissé seul a une signification spéciale, c'est-à-dire qu'il signifie la fin de la chaîne.) et remplacez-le par ''.

Ou nous pouvons nous échapper (\\) le personnage ($) pour le faire correspondre et le remplacer par ''.

df1$COL1 <- as.numeric(gsub('\\$|,', '', df1$COL1))
26
akrun

Nous pourrions utiliser parse_number du package readr qui supprime tous les caractères non numériques.

library(readr)
parse_number(df$COL1)
#[1] 54345 65231 76234
36
Ronak Shah

Une autre option utilisant la bibliothèque stringr pour supprimer "$" et "," puis convertissez comme suit:

df %>% mutate(COL1 = COL1 %>% str_remove_all("\\$,") %>% as.numeric())
0
charlehl

Simplement:

  1. supprimer les virgules
  2. supprimer les signes dollar
  3. convertir en numérique (ou entier)

Par exemple.

library(dplyr)

"$54,345" %>% gsub(",", "", .) %>% gsub("\\$", "", .) %>% as.numeric()
# [1] 54345
0
stevec