2011-04-20 14 views
5

Veritabanından veri alıp Stata .dta dosyalarında saklı veri var. Ama ben foreign paketini kullanarak R'ye okuduğumda, gördüğümden farklı bir tarih formatı alıyorum. Diğer tüm tarihler "% m /% d /% Y" dir ve doğru şekilde içe aktarılır.Tek tarih biçimini yorumlama/dönüştürme Yardım

Veritabanının belgelerini araştırdım, ancak "DealActiveDate" için tek tarih biçiminde bir açıklama yok. "Tesis başlangıç ​​tarihi" tarihi "DealActiveDate" e yakın olmalı, ancak mutlaka aynı olmamalıdır. İşte bu iki sütunun birkaç satırı.

facilitystartdate DealActiveDate 
1   09/12/1987 874022400000 
2   09/12/1987 874022400000 
3   09/12/1987 874022400000 
4   09/01/1987 873072000000 
5   09/08/1987 873676800000 
6   10/01/1987 875664000000 
7   08/01/1987 870393600000 
8   08/01/1987 870393600000 
9   10/01/1987 875664000000 
10  09/01/1987 873072000000 

Eğer daha geleneksel bir tarihe "DealActiveDate" dönüştürmek için nasıl bir fikrin varsa bana bildirin. Teşekkürler! (SO iyi mekan olduğundan emin değilim, ama herhangi bir diğer seçenekleri düşünmek adamcağız!)

+1

Belki de daha kolay olacağını Veritabanının/Stata dosyasının neden R tarafındaki mühendisleri tersine çevirmeye çalışmak yerine iki tarihi farklı şekilde ele aldığını/sakladığını öğrenin. –

+0

@Gavin - Bence bu bir 'yabancı' sorun değil; Bu muhtemelen tek bir tarih biçimidir. Verileri "DealActiveDate" sütununda bir sorun olduğunu düşünen bir Stata kullanıcısından aldım, ancak sorunu asla takip etmedim (asla kullanmaz). Veritabanının çevrimiçi sürümünü aradım ama şansım yoktu. Bazı sihirbazların tuhaf tarihi veya Stata formatını bilmesini umuyorum. –

+0

Sanırım yanlış anladınız - Sorunu orijinal dosyalarda saklandığı şekilde çözmeye çalışmak istedim, yabancı bunu neden tanımıyor değil. Bir çağdan bu yana milisaniye benziyor gibi görünüyor (@ Joshua'nın cevabından) bu yüzden şimdi öneriyi görmezden gelebiliriz :-) –

cevap

8

1960-01-01 itibaren milisaniye gibi görünüyor:

as.POSIXct(874022400000/1000, origin="1960-01-01") 
# [1] "1987-09-12 01:00:00 CDT" 
+0

Teşekkürler! 87'yi ve sayım günlerini düşürdüm, ama hiçbir yerim olmadı. –

+0

@richardh: Rica ederim. Saatlerin arasındaki farkın, gün sayısının 1000 katı olduğu ('(874022400000-873072000000)/(60 * 60 * 24)' = 11000) milisaniye anlamına geldiğini fark ettim. .POSIXct (874022400) '10 yıl önce kapalıydı, bu da daha önceki bir dönemi ima ediyordu. –