4 votes

Comment garder le signe négatif du caractère dans un nombre

Je voulais conserver le signe négatif du caractère tout en le convertissant en classe numérique. Mais j'ai fini par obtenir un avertissement comme des NAs introduits par coercition.

test <- c("001","00-2","0003")
test <- as.numeric(as.character(test))

Je m'attends à ce que la sortie réelle soit :

1 -2 3

Mais la sortie actuelle est :

1 NA 3

Est-ce que quelqu'un peut m'aider sur ça ? Merci !

6voto

G. Grothendieck Points 40825

1) sub Supprimez les zéros en tête puis convertissez :

as.numeric(sub("^0+", "", test))
## [1]  1 -2  3

2) trimws En R 3.6 ou plus tard cela fonctionnerait également :

as.numeric(trimws(test, "left", 0))
## [1]  1 -2  3

Cas particulier

3) paste0 S'il est possible d'avoir que des zéros, alors le sub réduira cette chaîne à une chaîne vide donc en supposant que nous n'avons pas de décimales, nous pouvons faire ceci :

test2 <- c(test, "00")
as.numeric(sub("^0+", "", paste0(test2, ".0")))
## [1]  1 -2  3  0

3a) ou ceci :

as.numeric(sub("^0*(.)", "\\1", test2))
## [1]  1 -2  3  0

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