Загрузка таблицы из базы данных с большими целыми числами в R - PullRequest
1 голос
/ 28 марта 2011

Я пытаюсь загрузить данные во фрейм данных в R из государственной базы данных Access.База данных предоставляет информацию о школах в штате, и каждая школа имеет 12-значный идентификационный номер.Когда я загружаю таблицу с

demo.factors <- sqlQuery(connection, "SELECT * FROM 'Demographic Factors' WHERE YEAR = 2010")

, она преобразует это число в то, что представляется научной нотацией (мои извинения за то, что я не очень хорошо понимаю внутреннюю работу здесь).Когда я пытаюсь преобразовать их обратно в целые числа, как они были в базе данных, используя

demo.factors$ENTITY_CD <- as.integer(demo.factors$ENTITY_CD)

, я получаю несколько NA и целых чисел, которые не соответствуют оригиналу.

Есть ли другой тип данных, который я должен использовать?Есть ли способ восстановить исходные целые или импортировать их с самого начала?

Большое вам спасибо за помощь!

1 Ответ

1 голос
/ 28 марта 2011

Ваша проблема заключается в том, что целочисленное значение может обрабатывать только числа до 2 * 10 ^ 9 (т.е. ~ 9 цифр длиной). Идентификационные номера ваших школ состоят из 12 цифр и, следовательно, должны быть числовыми или двойными.

Но это все не имеет значения, так как число будет правильно обрабатываться R.

Мне кажется, у вас проблема с дисплеем этого номера. У вас есть несколько вариантов. Вот некоторые из них:

Отображение чисел в виде строки символов:

x=999999999999
as.character(x)
[1] "999999999999"

Используйте любую из функций форматирования строки, чтобы указать формат. Это все равно преобразует значение для отображения в виде символа, но дает вам гибкость форматирования. Например, используйте формат:

format(x, scientific=FALSE, width=12)
[1] " 999999999999"

Другие функции, выполняющие аналогичное форматирование, включают sprintf, prettyNum и formatC.

В двух словах, не пытайтесь делать преобразование типов. Просто используйте одну из этих функций, если хотите отобразить ваши результаты. Если вы действительно хотите выполнить преобразование типов, то я предлагаю вам преобразовать число в as.character () - причина в том, что я подозреваю, что вы никогда не будете выполнять арифметику с этими числами, поэтому они по сути являются символьными строками.

...