Je rencontre un problème lors de la conversion du caractère du pourcentage en numérique. Par exemple. Je veux convertir "10%" en 10%, mais
as.numeric("10%")
renvoie NA
. Avez-vous des idées?
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.
Retirer le "%"
, convertissez en numérique, puis divisez par 100.
x <- c("10%","5%")
as.numeric(sub("%","",x))/100
# [1] 0.10 0.05
Débarrassez-vous d'abord des caractères étrangers:
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 premiers caractères non numériques, les derniers caractères non numériques et laisse le point décimal s'il est présent.
Si vous êtes un utilisateur de tidyverse
(et en fait aussi sinon) il y a maintenant un parse_number
fonction 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")
Essayez avec:
> x = "10%"
> as.numeric(substr(x,0,nchar(x)-1))
[1] 10
Cela fonctionne également 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.
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']])