2015-10-11 22 views
5

Tôi có tệp csv với một cột dấu thời gian "2000-01-01 12: 00: 00.123456". Cách được khuyến nghị để xử lý nó trong bảng dữ liệu là gì? Tôi cần phải đối phó với nhóm, kết hợp/cán tham gia với cột Idate từ bảng khác, chuỗi thời gian âm mưu vvBảng dữ liệu R được khuyến nghị để xử lý thời gian ngày

IDateTime("2000-01-01 12:00:00.123456") 

Error in if (any(neg)) res[neg] = paste("-", res[neg], sep = "") : 
missing value where TRUE/FALSE needed 

Tôi thấy câu trả lời này trong duplicate câu hỏi càng tốt, trong đó đề nghị Matthew tay đúc ngày thành số nguyên. Nhưng đó là 3 tuổi và tôi tự hỏi liệu có cách nào tốt hơn?

+2

Bạn cần chuyển cho đối tượng 'POSIXct', Thử' IDateTime (as.POSIXct ("2000-01-01 12: 00: 00.123456")) '. Bạn có thể cần xác định múi giờ thông qua đối số 'tz' cho các trường hợp đặc biệt. –

+0

Cảm ơn. Bạn có thể đưa nó vào một câu trả lời để tôi có thể chấp nhận nó? – jf328

Trả lời

7

IDateTime yêu cầu đối tượng lớp POSIXct để hoạt động bình thường (có vẻ như hoạt động đúng với chuyển đổi factor cũng vậy, không chắc chắn lý do). Tôi đồng ý nó không được tài liệu rất tốt và có thể có giá trị mở một FR/PR về GH liên quan đến tài liệu - có một hàng đợi mở liên quan đến một IDateTimevignette mặc dù. Và đã có một FR về việc cho phép nó hoạt động với lớp học character.

IDateTime(as.POSIXct("2000-01-01 12:00:00.123456")) 
#   idate itime 
# 1: 2000-01-01 12:00:00 
## IDateTime(factor("2000-01-01 12:00:00.123456")) ## will also work 

Chú ý đến các tz tham số trong as.POSIXct nếu bạn muốn tránh những hành vi bất ngờ


Bất kể, nó có vẻ như lỗi thực sự gây ra theo phương pháp in của ITime trong đó kêu gọi format.ITime, xem herehere ví dụ: nếu bạn sẽ chạy res <- IDateTime("2015-09-29 08:22:00"), điều này sẽ không sẽ xuất hiện lỗi, mặc dù res sẽ là NA do chuyển đổi sai (tôi tin) trong here (định dạng chỉ là "%H:%M:%OS"). Nó có vẻ như một lỗi đối với tôi và tôi vẫn không chắc chắn lý do tại sao lớp học factor hoạt động chính xác khi không có phương pháp factor trong methods(as.ITime). Có thể do chế độ lưu trữ nội bộ integer gọi một phương thức liên quan khác.

2

Tùy thuộc vào độ chính xác cần thiết cho trường thời gian của bạn, bạn có thể cần sử dụng POSIXct thay vì IDateTime.
Định dạng dấu thời gian được lưu trữ trong tệp nguồn của bạn có thể được sao chép trong R theo format(Sys.time(), "%Y-%m-%d %H:%M:%OS6").
Khi sử dụng IDateTime bạn sẽ mất các giây, bạn có thể chơi với ITime và xem liệu nó có phù hợp với nhu cầu của bạn hay không.
Nếu bạn sẽ gắn bó với POSIXct thì bạn nên biết chức năng ?setNumericRounding đôi khi có thể quan trọng vì nó ảnh hưởng đến việc đặt hàng và tham gia vào loại dữ liệu số cơ bản của POSIXct.

Các vấn đề liên quan