Как отображать числовые столбцы в R-кадре данных без научной нотации ('e + 07') - PullRequest
4 голосов
/ 15 июля 2011

У меня есть R-фрейм данных с одним столбцом, содержащим строку чисел, но я хотел бы рассматривать их как фактор (главным образом, чтобы остановить сокращение R с помощью e + 04 и т. Д.).Один способ, который я нашел, чтобы решить эту проблему, - отредактировать CSV-файл, из которого взяты данные, и добавить фиктивную запись со словом в нужном столбце, а затем снова импортировать его.Как получить этот эффект, используя функции R, не возиться с CSV?

Чтобы уточнить, мой фрейм данных выглядит так:

pNum,Condition,numberEntered
1,2,5.0970304e+07

Я хочу изменить тип данных numberEntered fromчисловой фактор и избавиться от надоедливых е + 07.

Ответы [ 3 ]

20 голосов
/ 15 июля 2011

Как сказал Джошуа, это проблема печати, а не проблема хранения. Вы можете изменить способ печати всех чисел (=, настроив getOption("scipen").

x <- c(1, 2, 509703045845, 0.0001)
print(x)
options(scipen = 50)
print(x)

В качестве альтернативы, вы можете изменить способ форматирования только этих чисел. (Это преобразует их в character.) Стоит познакомиться с format и formatC. Для начала сравните

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 голосов
/ 15 июля 2011

Извините, но вы тратили время на решение проблемы, которой не существует. Используйте str, чтобы проверить типы данных в вашем data.frame, и вы увидите, что numberEntered равно num и не сокращается. Единственной проблемой является количество значащих цифр, которые напечатаны .

options(digits=7)
(x <- data.frame(pNum=1,Condition=2,numberEntered=509703045845))
options(digits=10)
x

Вы можете использовать options(digits=22), чтобы настроить печать максимального количества значащих цифр. См. ?options для получения дополнительной информации.

2 голосов
/ 15 июля 2011

Я бы не советовал хранить числа с плавающей точкой в ​​качестве факторов ... но вы все равно можете это сделать.Но я также включил несколько других вариантов.

> 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...