Domanda

Sto cercando di estrarre dati dal nostro datamart di Oracle in R utilizzando RODBC. Sono stato in grado di lavorare con alcuni dei miei problemi, ma ho una domanda di base.

Come posso mantenere la formattazione in quanto si trova nella base di dati?

Con il seguente comando

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

I miei dati vengono recuperati come previsto, ma alcuni campi vengono convertiti in numerico e logico, una volta in R quando dovrebbero essere caratteri. Posso ottenere intorno a questo se uso:

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

Ma io colonne "perdere" essere formattati come date in cui vorrei che fossero.

È stato utile?

Soluzione

Si sta catturato in un vuoto che ho lottato con pure. Non posso opinare su ciò che è "giusto" o "migliore", ma solo quello che ho fatto in passato.

Io di solito fare quello che hai fatto nel primo esempio e solo trattare con i cambiamenti di tipo una volta che ottengono in R. Se si voleva fare il secondo metodo, è possibile convertire la data di una volta che era in sistemi R. Il mio Oracle sembra sempre essere impostato per tornare date nel formato "22-NOV-10" che è fastidioso come diamine da analizzare. Quindi mi sento di usare la funzione di Oracle to_char () nella mia query per formattare le date in qualcosa di R può facilmente riconoscere.

Quindi, per esempio, potrei avere questo nel mio SELECT:

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

allora io tiro che in una cornice di dati chiamato myData e fare questo:

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

se trattare fissare date o accordo con il fissaggio altri campi in realtà dipende da quante data campi hai e come molti non-data campi il primo metodo scombina. Ma nella mia esperienza ho neanche finire fissare uno, o l'altro.

qualcosa che si potrebbe prendere in considerazione quando si utilizza il metodo 1: Provare a utilizzare cast () in SQL al fine di costringere un campo in un determinato tipo. Le uniche volte che ho avuto problemi con RODBC aver molestato i miei tipi di dati è quando il tipo è ambigua sul lato server. Questo è di solito il risultato di dichiarazioni CASE o somesuch sull'estremità SQL.

Altri suggerimenti

L'argomento as.is può essere un vettore booleano.

Così, se il set di risultati è costituito da, diciamo, due colonne di data seguita da una colonna di caratteri, si può fare:

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

Modifica : come suggerito da Kalin si può anche fare riferimento alle colonne che dovrebbero essere "come è". Ad esempio

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

lascerà colonne due e quattro "così come sono".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top