Tôi đang làm việc với dữ liệu .csv được xuất từ Teradata. Một số cột ban đầu là dấu thời gian với múi giờ, vì vậy sau khi tải .csv trong R, tôi muốn chuyển đổi các cột này (được nạp dưới dạng chuỗi) thành POSIXlt hoặc POSIXct. Tôi đang sử dụng strptime
, nhưng định dạng của múi giờ từ tệp .csv không khớp với những gì strptime
đang mong đợi. Ví dụ: nó mong đợi -0400
nhưng .csv có định dạng -04:00
trong đó dấu hai chấm tách biệt giờ và phút.Sử dụng strptime% z với định dạng múi giờ đặc biệt
Tôi có thể loại bỏ dấu hai chấm, nhưng đây là bước bổ sung và biến chứng tôi muốn tránh nếu có thể. Có cách nào để yêu cầu strptime
sử dụng định dạng khác cho múi giờ (%z
) không?
Dưới đây là một ví dụ:
## Example data:
x <- c("2011-10-12 22:17:13.860746-04:00", "2011-10-12 22:17:13.860746+00:00")
format <- "%Y-%m-%d %H:%M:%OS%z"
## Doesn't work:
strptime(x,format)
## [1] NA NA
## Ignores the timezone:
as.POSIXct(x)
## [1] "2011-10-12 22:17:13 EDT" "2011-10-12 22:17:13 EDT"
## Remove the last colon:
x2 <- gsub("(.*):", "\\1", x)
x2
## [1] "2011-10-12 22:17:13.860746-0400" "2011-10-12 22:17:13.860746+0000"
## This works, but requires extra processing (removing the colon)
strptime(x2,format)
## [1] "2011-10-12 22:17:13" "2011-10-12 18:17:13"
Vì vậy, tôi đang tìm cách để đạt được kết quả cuối cùng này sử dụng một cái gì đó giống như strptime(x,"%Y-%m-%d %H:%M:%OS%zz")
, nơi %zz
là một biểu thức tùy chỉnh cho múi giờ công nhận định dạng -04:00
. Hoặc %zH:%zM
có thể còn tốt hơn nữa.
Nếu điều này là không thể, có ai có chức năng trơn/linh hoạt để chuyển đổi chuỗi (các định dạng khác nhau) thành ngày cho nhiều cột của dữ liệu.frame/data.table không?
Đó là năm 2016 và trên thế giới vẫn còn phải đối phó với điều này ... – sehe