Thật không may là những gì (đối với hiệu quả) strptime
tạo ra một loại POSIXlt, không được hỗ trợ bởi data.table
và sẽ luôn có kích thước (40 byte mỗi ngày!) Và cấu trúc. Mặc dù strftime
tạo ra POSIXct tốt hơn nhiều, nó vẫn thực hiện qua POSIXlt. Xem thêm thông tin ở đây:
http://stackoverflow.com/a/12788992/403310
Nhìn về căn cứ chức năng như as.Date
, nó sử dụng strptime
quá, tạo ra một số nguyên bù đắp từ thời đại (kỳ quặc) được lưu trữ như gấp đôi. Lớp IDate
(và bạn bè) trong data.table
nhằm mục đích để đạt được số nguyên epoch bù đắp được lưu trữ như, um, số nguyên. Thích hợp để phân loại nhanh theo base::sort.list(method = "radix")
(đây thực sự là một loại đếm). IDate
không thực sự nhằm mục đích chuyển đổi nhanh (thường là một lần).
Vì vậy, để chuyển đổi ngày/giờ chuỗi, đúng hay sai, tôi có xu hướng cuộn chức năng trợ giúp của riêng mình.
Nếu ngày chuỗi là "2012-12-24"
Tôi muốn hướng đến: as.integer(gsub("-", "", col))
và tiếp tục với YYYYMMDD
ngày nguyên. Tương tự, thời gian có thể là HHMMDD
dưới dạng số nguyên. Hai cột: date
và time
riêng biệt có thể hữu ích nếu bạn thường muốn roll = TRUE
trong vòng một ngày, nhưng không phải cho ngày trước đó. Nhóm theo tháng rất đơn giản và nhanh chóng: by = date %/% 100L
. Thêm và trừ ngày là phiền hà, nhưng nó là anyway bởi vì hiếm khi nào bạn muốn thêm ngày dương lịch, thay vì ngày thường hoặc ngày làm việc. Vì vậy, đó là một tra cứu cho vector ngày làm việc của bạn anyway.
Trong trường hợp của bạn, tháng ký tự sẽ cần chuyển đổi thành 1:12
. Không có dấu tách trong ngày "01APR2008" của bạn, do đó, substring
sẽ là một chiều theo sau là match
hoặc fmatch
trên tên tháng. Bạn có kiểm soát được định dạng tệp không? Nếu vậy, số sẽ tốt hơn ở định dạng rõ ràng, tự động sắp xếp theo thứ tự như %Y-%m-%d
hoặc %Y%m%d
.
Tôi chưa biết cách thực hiện tốt nhất trong fread
, vì vậy ngày/giờ được để lại dưới dạng ký tự hiện tại vì tôi chưa biết cách phát hiện định dạng ngày hoặc loại đầu ra nào. Nó không cần xuất hoặc là số nguyên hoặc ngày kép mặc dù, chứ không phải là ký tự không hiệu quả.Tôi nghi ngờ rằng việc sử dụng YYYYMMDD
số nguyên của tôi được xem là độc đáo, vì vậy tôi hơi lưỡng lự để làm điều đó mặc định. Họ có vị trí của họ, và có những ưu và nhược điểm của thời đại dựa trên quá. Ngày không có luôn là thời đại trên tất cả những gì tôi đề xuất.
Bạn nghĩ sao? Btw, cảm ơn sự khuyến khích trên fread
; đã được tốt đẹp để xem.
bạn có thể cho biết cách họ xem tệp dữ liệu của bạn không? – agstudy
Xin chào, tệp là tệp csv có 'sep ="; "' và định dạng ngày trông giống như "01APR2008: 09: 00: 00" 'là' format = "% d% b% Y:% H: % M:% S "'. Những gì tôi đã làm là 'DT [, ngày: = IDate (oldType,"% d% b% Y ")]; DT [, thời gian: = ITime (oldType,"% d% b% Y:% H:% M :% S ")]' và cuối cùng 'setkeyv (DT, c (" ngày "," thời gian "))' – statquant
ngày là cột đầu tiên của dữ liệu của bạn? – agstudy