2017-09-18 25 views
0

Je dispose d'un fichier CSV où les valeurs numériques sont stockées de manière à ceci:R - comment faire tomber les caractères de la chaîne en fonction de leurs valeurs?

+000000000000000000000001101.7100 

Le nombre est au-dessus 1101,71. Cette chaîne a toujours la même longueur, donc le nombre de zéros avant le nombre réel dépend de la longueur du nombre. Comment puis-je supprimer le + et tous les 0 avant le nombre réel afin que je puisse ensuite le convertir en numérique facilement?

Répondre

1

je manquer un point important, mais mieux essayer mon serait comme ceci:

1) lire les valeurs en tant que caractère

2) utiliser substr pour se débarrasser du premier caractère, à savoir le signe plus

3) convertir colonne avec as.integer/cette façon, nous perdons en toute sécurité des zéros à gauche

+0

J'ai utilisé à la fin une solution similaire, plus précisément une combinaison de gsub et as.numeric. – PrzeM

3

Si elle est de largeur fixe, puis substring sera une option plus rapide

as.numeric(substring(str1, nchar(str1)-8)) 
#[1] 1101.71 

mais si nous ne savons pas combien de 0 ce sera là au début, puis une autre option est sub où nous correspondent à une + au début (^) de la chaîne suivie par 0 ou plusieurs éléments de 0 (0*) et remplaçons avec blanc ("")

as.numeric(sub("^\\+0*", "", str1)) 
#[1] 1101.71 

Notez que nous échapper à la + comme il est un métacaractère impliquant un ou plusieurs

+0

Je connais cette méthode, mais avec un nombre plus petit, elle gardera quelques 0 au début. – PrzeM

+1

@PrzeM Mis à jour avec une autre méthode – akrun

+0

Merci, mais l'autre réponse semblait un peu plus simple, alors utilisez-la à la place. – PrzeM