Soru Excel DateTime seri numarasını R DateTime'a dönüştürme


Excel tabloları ArcGIS'te xy puanı olarak alındığında, her nokta için doğru DateTime damgasını kaybetmeye devam ediyorum. Böylece, DateTime seri numarasını biçimlendirdim, .shp'yi oluşturdum ve readOGR () kullanarak .shp'yi R'ye okuyun.

Bir kez R kullanarak doğru tarihe dönüştürebilirim as.Date() ve origin = "1899-12-30" argüman, ama zaman kalmadı. Tek bir Tarih ile örnek gördüğüm sırada, DateTime ile işlenmiş örnekleri görmedim. Kullanıyorum as.Date() Hem de as.POSIXct() ama bu görünüşte basit bir görev biraz sinir bozucu oldu, bu yüzden yazı…

Ben excel seri numarası yanı sıra doğru DateTime formatında 10 satır ile örnek veri seti oluşturduk.

* Richard ve thelatemail'i, daha önceki bir engellemeye olan keskin gözlerinden dolayı teşekkürler. Verileri düzelttim ve buraya yeniden gönderdim.

İşte örnek verilerim

helpData <- structure(list(ID = 1:10, DateTime = structure(c(9L, 1L, 2L, 
3L, 4L, 5L, 6L, 7L, 8L, 8L), .Label = c("3/11/2011 7:55", "3/13/2011 7:55", 
"3/14/2011 0:00", "3/14/2011 10:04", "3/14/2011 7:55", "3/15/2011 19:55", 
"3/17/2011 7:55", "3/18/2011 4:04", "3/4/2011 6:00"), class = "factor"), 
ExcelNum = c(40606.25, 40613.32986, 40615.32986, 40616, 40616.41944, 
40616.32986, 40617.82986, 40619.32986, 40620.16944, 40620.16944
)), .Names = c("ID", "DateTime", "ExcelNum"), class = "data.frame", row.names = c(NA, 
-10L))

head(helpData)

DateTime GMT'dir. Zaman 24 saatlik bir saattir (yani, AM / PM değil). Windows 7'de çalışıyorum, en yeni R ve ArcGIS 10'ları kullanıyorum.

Aşağıdaki kod doğru Tarihi alır, ancak zaman hala eksik.

newDateTime <- as.Date(helpData[ , "ExcelNum"], origin = "1899-12-30")
head(newDateTime)

Şimdiden teşekkürler!


25
2017-10-04 03:20


Menşei


Benzer konulara da bakabilirsiniz. İşte ve İşte. - Henrik


Cevaplar:


Numaranız gün sayıyor. Saniyeye dönüştürün ve hepiniz ayarlanmışsınız (daha az bir yuvarlama hatası)

helpData[["ExcelDate"]] <- 
  as.POSIXct(helpData[["ExcelNum"]] * (60*60*24)
    , origin="1899-12-30"
    , tz="GMT")


#     ID        DateTime ExcelNum           ExcelDate
#  1   1   3/4/2011 6:00 40606.25 2011-03-04 06:00:00
#  2   2  3/11/2011 7:55 40613.33 2011-03-11 07:54:59
#  3   3  3/13/2011 7:55 40615.33 2011-03-13 07:54:59
#  4   4  3/14/2011 0:00 40616.00 2011-03-14 00:00:00
#  5   5 3/14/2011 10:04 40616.42 2011-03-14 10:03:59
#  6   6  3/14/2011 7:55 40616.33 2011-03-14 07:54:59
#  7   7 3/15/2011 19:55 40617.83 2011-03-15 19:54:59
#  8   8  3/17/2011 7:55 40619.33 2011-03-17 07:54:59
#  9   9  3/18/2011 4:04 40620.17 2011-03-18 04:03:59
#  10 10  3/18/2011 4:04 40620.17 2011-03-18 04:03:59

38
2017-10-04 04:19



Bilgilendirici öneriler için Ricardo Saporta ve thelatemail için teşekkürler - B. Davis


Zaman verileri hala var, sadece görüntülenmiyor - bkz:

as.numeric(newDateTime)
#[1] 15037.25 15044.33 15046.33 15047.00 etc etc

Günlerce parçalarla çalışmak istiyorsanız, muhtemelen en iyi POSIXct Temsiller olsa da. Bunu yapmak için, Datesonra dönüştürün POSIXct, bununla birlikte doğrudan bir karşılaştırma yapmak istiyorsanız, bu durum saat dilimi sorunlarına neden olur DateTime sütunu.

helpData$newDate <- as.POSIXct(as.Date(helpData$ExcelNum,origin="1899-12-30"))
attr(helpData$newDate,"tzone") <- "UTC"
helpData

#   ID        DateTime ExcelNum             newDate
#1   1   3/4/2011 6:00 40606.25 2011-03-04 06:00:00
#2   2  3/11/2011 7:55 40613.33 2011-03-11 07:54:59
#3   3  3/13/2011 7:55 40615.33 2011-03-13 07:54:59
#4   4  3/14/2011 0:00 40616.00 2011-03-14 00:00:00
#5   5 3/14/2011 10:04 40616.42 2011-03-14 10:03:59
#6   6  3/14/2011 7:55 40616.33 2011-03-14 07:54:59
#7   7 3/15/2011 19:55 40617.83 2011-03-15 19:54:59
#8   8  3/17/2011 7:55 40619.33 2011-03-17 07:54:59
#9   9  3/18/2011 4:04 40620.17 2011-03-18 04:03:59
#10 10  3/18/2011 4:04 40620.17 2011-03-18 04:03:59

9
2017-10-04 04:41





Kapıcı ve tibble paketleri kullanarak bunu yapmanın başka bir yolu:

install.packages("janitor")

install.packages("tibble")

library(tibble)

library(janitor)

excel_numeric_to_date(as.numeric(as.character(helpData$ExcelNum), date_system = "modern")

3
2017-10-23 17:22





İşlevi kullanın convertToDateTime. İleriye doğru. İşte bir örnek:

library(openxlsx)
convertToDateTime(helpData$ExcelNum, origin = "1900-01-01")

Nasıl çalıştığını bana bildirin.


3
2017-08-08 20:46