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

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

as.numeric("10%")

retourne NA. Avez-vous des idées?

30
demandé sur easwee 2011-11-30 20:07:53

5 réponses

10% est par définition 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 façon:

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

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

54
répondu Paul Hiemstra 2011-11-30 16:13:57

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

x <- c("10%","5%")
as.numeric(sub("%","",x))/100
# [1] 0.10 0.05
26
répondu Joshua Ulrich 2011-11-30 16:15:25

se débarrasser des caractères étrangers d'abord:

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 l'exemple de données).

cette fonction gère maintenant: les caractères non numériques de tête, les caractères non numériques de queue, et les feuilles dans le point décimal si présent.

8
répondu Ari B. Friedman 2011-11-30 16:39:35

Essaie avec:

> x = "10%"
> as.numeric(substr(x,0,nchar(x)-1))
[1] 10

Cela fonctionne aussi avec les décimales:

> x = "10.1232%"
> as.numeric(substr(x,0,nchar(x)-1))
[1] 10.1232

L'idée est que le symbole % est toujours à la fin de la chaîne.

3
répondu Galled 2011-11-30 16:33:02

je voulais convertir une colonne entière et combiner les réponses ci-dessus dans une fonction sapply:

pct_to_number<- function(x){
  x_replace_pct<-sub("%", "", x)
  x_as_numeric<-as.numeric(x_replace_pct)
  }
df['ColumnName'] = sapply(df['ColumnName'], pct_to_number)
1
répondu nanselm2 2018-01-05 01:58:13