8
votes

Comment afficher des colonnes numériques dans un Dataframe R sans notation scientifique ('E + 07')

J'ai un dataframe R avec une colonne contenant une chaîne de nombres, mais je voudrais les traiter comme un facteur (principalement pour arrêter de raccourcir les chiffres à l'aide de E + 04, etc.). Une façon de résoudre ce problème est de modifier le fichier CSV que les données sont extraites et ajoutent une entrée factice qui a un mot dans la colonne souhaitée, puis de le réimposer. Comment puis-je obtenir cet effet à l'aide de randices R sans gâcher avec le CSV?

Pour clarifier, mon fichier de données ressemble à ceci: xxx

Je veux changer le type de données de numéromanes de chiffrement à un facteur et de se débarrasser de la PESKY E + 07.


0 commentaires

3 Réponses :


3
votes

Je conseillerais de stocker des chiffres de points flottants en tant que facteurs ... mais vous pouvez toujours le faire. Mais j'ai également inclus plusieurs autres options.

> txt <- "pNum,Condition,numberEntered
+ 1,2,5.0970304e+07"
> dat <- read.csv(textConnection(txt),colClasses=c("integer","integer","factor"))
> dat
  pNum Condition numberEntered
1    1         2 5.0970304e+07
> dat[,3]
[1] 5.0970304e+07
Levels: 5.0970304e+07
> dat <- read.csv(textConnection(txt),colClasses=c("integer","integer","character"))
> dat[,3]
[1] "5.0970304e+07"
> dat <- read.csv(textConnection(txt),colClasses=c("integer","integer","numeric"))
> dat[,3]
[1] 50970304
> print.numeric <- function(...) formatC(...,format="f")
> print(dat[,3])
[1] "50970304.0000"


0 commentaires

4
votes

Désolé de dire, mais vous dépensez du temps à essayer de résoudre un problème qui n'existe pas. Utilisez str pour vérifier les types de données dans votre fichier data.frame et vous verrez que numéryentred est num et ce n'est pas " raccourci ". Le seul problème est le nombre de chiffres significatifs imprimés . xxx

Vous pouvez utiliser des options (chiffres = 22) pour la définir Imprimez le nombre maximum de chiffres significatifs. Voir ? Options Pour plus d'informations.


2 commentaires

Merci pour la réponse. J'ai joué un peu avec l'option des chiffres mais je soupçonne que je ne comprends pas. Les chiffres varient entre 2 et 8 dans cette colonne, donc je ne suis donc pas sûr de définir la valeur des chiffres. J'en ai besoin pour montrer 2.139 au lieu de 2.1390000E + 00 et 3924.75 au lieu de 3.9247500E + 03 (c'est ce qui est affiché après l'utilisation des options (chiffres = 8)


Cela semble être un problème avec les options (SCIPEN) .



26
votes

Comme l'a dit Joshua, il s'agit d'un problème d'impression et non d'un problème de stockage. Vous pouvez modifier la façon dont tous les numéros sont imprimés (= en ajustant le code getOption ("SCIPEN") CODE>.

format(x)
format(x, digits = 10)
format(x, digits = 3)
format(x, digits = 3, scientific = 5)
format(x, trim = TRUE, digits = 3, scientific = 5)
formatC(x)
formatC(x, format = "fg")
formatC(x, format = "fg", flag = "+")


3 commentaires

Merci! C'était très informatif effectivement et corrigé mon problème. Merci de me fournir les exemples utiles.


Pour ajouter un point de clarification, format et formatc Ne modifiez pas la façon dont les chiffres sont imprimés; Ils convertissent les chiffres en caractères à l'aide du format spécifié.


Est-il possible de changer un vecteur numérique à la notation scientifique sans la convertir en caractère?