2010-11-22 24 views
9

Oracle datamart'ımızdaki verileri RODBC kullanarak R'ye çekmeye çalışıyorum. Bazı meselelerim üzerinde çalışabildim, ancak temel bir sorum var.RODBC Sorgulama Ayarı

Biçimlendirmeyi veritabanında bulunduğu şekilde nasıl koruyabilirim?

aşağıdaki komutu

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

Benim veri beklendiği gibi alınır, ancak karakter olmalıdır bazı alanlar Ar sonra sayısal ve mantıksal dönüştürülür kullanma.

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

Ama onları olmak istiyorum ne zaman sütunlar tarihleri ​​olarak biçimlendirilmiş olan "kaybetmek": Ben kullanırsam bu sorunun üstesinden gelebilirsiniz.

+0

tam olarak "kaybetmek" ile ne demek istiyorsunuz? Tarih sütunları tam sayıya veya Oracle varsayılan tarihi olarak dönüştürülür mi (yani "22-NOV-10")? –

+0

İlk sorguyu kullanırsam, tarih alanları veri çerçevesinde POSIXct olarak döndürülür. İkinci sorgu karakterdir. Açıkçası dünyanın sonu değil, ama bir kez içinde veri türlerini düzeltmeyi en aza indirmeye çalışıyorum. – Btibert3

+0

İlgili: http://stackoverflow.com/questions/38443157/rodbc-chars-and-numerics-converted-aggressively-with- Olmadan – Scarabee

cevap

6

Bir de boşlukta kaldın, ben de mücadele ettim. “Doğru” ya da “en iyi” olanı değil, sadece geçmişte yaptığım şeyleri yapamam.

Genellikle ilk örnekte yaptığınız şeyi gerçekleştiririm ve sadece R'ye girdiklerinde tür değişiklikleriyle uğraşırdım. İkinci yöntemi yapmak isterseniz, tarihi R'ye dönüştürdüğünüzde, Oracle sistemlerim görünür. her zaman ayrıştırmak için heck olarak rahatsız edici "22-NOV-10" biçiminde tarih dönmek için ayarlanmış. Bu yüzden, tarihlerimi R'nin kolayca tanıyabildiği bir şeye biçimlendirmek için sorgumda Oracle to_char() işlevini kullanırdım.

Yani, örneğin, benim SELECT deyimi içinde bu olabilir: başa İster

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

:

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

sonra myData denilen bir veri çerçevesi içine ve bunu bu çekin tarihleri ​​düzeltmek veya diğer alanları düzeltmekle uğraşmak, kaç tane tarih alanına sahip olduğunuza ve ilk yöntemin kaç tarihi olmayan alana dağıldığına bağlıdır. Ama deneyimlerime göre ya birini tamir ediyorum ya da diğeri.

Yöntem 1'i kullanırken göz önünde bulundurmanız gereken bir şey: Belirli bir alana bir alanı zorlamak için SQL'inizde cast() kullanmayı deneyin. RODBC ile veri türlerimi mazur kıldığım tek sorun, türün sunucu tarafında belirsiz olması. Bu genellikle CASE ifadelerinin veya SQL ucunda somesuch sonucudur.

+0

Teşekkürler JD. Bir atış yapacağım, ama en azından ne olursa olsun bazı veri hazırlığı yapmam gerektiğini doğrular. – Btibert3

1

as.is bağımsız değişkeni bir boole vektörü olabilir.

Yani sonuç kümesi bir karakter sütun ardından iki tarih sütunları, diyelim ki, oluşuyorsa, bunu yapabilirsiniz:

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

FYI, "olduğu gibi" olması gereken sütunların sayısını da koyabilirsiniz (ve diğerlerini varsayılan olarak bırakıyorum). Örneğin, '... as.is = c (2, 4)' sütun 2 ve 4'ün "olduğu gibi" yorumlanmasını sağlar. – Kalin