Вопрос

Я пытаюсь вытащить данные из нашего Oracle Datamart в R с использованием RODBC. Я смог проработать некоторые из моих вопросов, но у меня есть один основной вопрос.

Как я могу сохранить форматирование, как он сидит в базе данных?

Используя следующую команду

uapp <- sqlQuery(ch, SQL, stringsAsFactors=F)

Мои данные извлекаются, как ожидалось, но некоторые поля преобразуются в числовые и логические один раз в R, когда они должны быть символами. Я могу обойти это, если я буду использовать:

uapp <- sqlQuery(ch, SQL, stringsAsFactors=F, as.is=T)

Но я «теряю» колонны, отформатированные как даты, когда я хотел бы, чтобы они были.

Это было полезно?

Решение

Вы поймали в разрыв, я тоже боролся. Я не могу опираться на то, что «правильно» или «лучшее», но только то, что я сделал в прошлом.

Я обычно делаю то, что вы делали в первом примере и просто разобрались с изменениями типа, когда они попадают в R. Если вы хотите сделать последний метод, вы могли бы преобразовать дату после того, как он был в R. Мои системы Oracle, кажется, всегда устанавливаются До возврата дат в формате «22-NOV-10», который раздражает, как чертовски для анализа. Поэтому я бы использовал функцию Oracle To_char () в моем запросе, чтобы отформатировать мои даты в то, что можно легко распознать.

Так, например, я мог бы иметь это в моем выборе:

to_char(myDate, 'yyyy-mm-dd') as myDate

Затем я натянул это в рамку данных, называемых MyData и сделать это:

myData$properDate <- strptime(myData$myDate, "%Y-%m-%d")

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

Что-то, что вы можете рассмотреть при использовании метода 1: попробуйте использовать CAST () в свой SQL, чтобы принудительно принудительно навести поле в определенном виде. Единственные времена, когда у меня были проблемы с RODBC, приставая к моим типам данных, это когда тип неоднозначен на стороне сервера. Обычно это результат отчетов о случаях или секунду на конец SQL.

Другие советы

То as.is Аргумент может быть логическим вектором.

Поэтому, если ваш набор результатов состоит из, скажем, две столбцы даты, за которым следует один столбец символов, вы можете сделать:

uapp <- sqlQuery(ch, SQL, stringsAsFactors = FALSE, as.is = c(FALSE, FALSE, TRUE))

РЕДАКТИРОВАТЬ: Как предложено Калинь, вы также можете обратиться к столбцам, которые должны быть «как есть». Например

uapp <- sqlQuery(ch, SQL, stringsAsFactors = FALSE, as.is = c(2, 4))

оставит колонны два и четырех "как".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top