41 votes

Comment convertir le caractère de pourcentage en numérique dans R

Je rencontre un problème lors de la conversion du caractère de pourcentage en numérique. Par exemple, je veux convertir "10 %" en 10 %, mais

 as.numeric("10%")

renvoie NA . Avez-vous des idées?

65voto

Paul Hiemstra Points 28390

10 % n'est par définition pas un vecteur numérique. Par conséquent, la réponse NA est correcte. Vous pouvez convertir un vecteur de caractères contenant ces nombres en numérique de cette manière :

 percent_vec = paste(1:100, "%", sep = "")
as.numeric(sub("%", "", percent_vec))

Cela fonctionne en utilisant sub pour remplacer le caractère % par rien.

31voto

Joshua Ulrich Points 68776

Supprimez le "%" , convertissez en numérique, puis divisez par 100.

 x <- c("10%","5%")
as.numeric(sub("%","",x))/100
# [1] 0.10 0.05

18voto

Giora Simchoni Points 966

Si vous êtes un utilisateur tidyverse (et en fait aussi sinon), il y a maintenant une fonction parse_number dans le package readr

 readr::parse_number("10%")

L'avantage est la généralisation à d'autres formats de chaîne courants tels que :

 parse_number("10.5%")
parse_number("$1,234.5")

8voto

Ari B. Friedman Points 24940

Débarrassez-vous d'abord des caractères superflus :

 topct <- function(x) { as.numeric( sub("\\D*([0-9.]+)\\D*","\\1",x) )/100 }
my.data <- paste(seq(20)/2, "%", sep = "")
> topct( my.data )
 [1] 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060 0.065 0.070 0.075 0.080
[17] 0.085 0.090 0.095 0.100

(Merci à Paul pour les données d'exemple).

Cette fonction gère désormais : les caractères non numériques de début, les caractères non numériques de fin et laisse le point décimal s'il est présent.

3voto

nanselm2 Points 593

Je voulais convertir une colonne entière et combiner les réponses ci-dessus.

 pct_to_number<- function(x){
  x_replace_pct<-sub("%", "", x)
  x_as_numeric<-as.numeric(x_replace_pct)
  }
df[['ColumnName']] = pct_to_number(df[['ColumnName']])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X