2014-09-26 18 views
8

Tôi đang gặp khó khăn khi hiểu cách sử dụng hàm guess_formats trong lubridate. Tôi có một vectơ ngày tháng trong một số định dạng/thứ tự không xác định. Tôi muốn chuyển đổi chúng thành một đối tượng Date (hoặc ít nhất là chuyển đổi càng nhiều càng tốt). Mã sau đây là những gì tôi đã thử:guess_formats + R + lubridate

library(lubridate) 
sampleDates <- c("4/6/2004","4/6/2004","4/6/2004","4/7/2004", 
     "4/6/2004","4/7/2004","2014-06-28","2014-06-30","2014-07-12", 
     "2014-07-29","2014-07-29","2014-08-12") 
formats <- guess_formats(sampleDates, c("Ymd", "mdY")) 
dates <- as.Date(sampleDates, format=formats) 

Điều này cung cấp tất cả NA.

Đây rõ ràng chỉ là một ví dụ ngắn. Trong trường hợp thực sự, tôi sẽ không biết các định dạng khác nhau nằm rải rác ở đâu, và tôi sẽ không chắc chắn 100% chỉ có% m /% d /% Y và% Y-% m-% d. Ai đó có thể cho tôi biết một trong hai A. như thế nào guess_formats sẽ được sử dụng trong ví dụ này hoặc B. là có một cái gì đó thích hợp hơn để sử dụng trong lubridate/base R, hy vọng mà không có rất nhiều regex'ing. Cảm ơn!

Chỉnh sửa: Tôi cũng đã thử parse_date_time. Những gì tôi không hiểu là các công việc sau cho ví dụ này:

parse_date_time(sampleDates, 
      orders = c("Ymd", "mdY"), 
      locale = "eng") 

Nhưng điều này không:

parse_date_time(sampleDates, 
      orders = c("mdY", "Ydm"), 
      locale = "eng") 

Trong bộ thực tế của tôi về dữ liệu, tôi sẽ không biết thứ tự của các định dạng, có vẻ quan trọng đối với chức năng này.

Chỉnh sửa đôi: Dur, OK, tôi thấy tôi đã có Ymd trong ví dụ parse_date_time đầu tiên và Ydm trong ví dụ thứ hai ... tiếp tục.

Trả lời

10

Không cần phải gọi chỉ cần sử dụng parse_date_time:

parse_date_time(sampleDates, c("Ymd", "mdY")) 

[1] "2004-04-06 UTC" "2004-04-06 UTC" "2004-04-06 UTC" "2004-04-07 UTC" "2004-04-06 UTC" 
[6] "2004-04-07 UTC" "2014-06-28 UTC" "2014-06-30 UTC" "2014-07-12 UTC" "2014-07-29 UTC" 
[11] "2014-07-29 UTC" "2014-08-12 UTC" 

Bên trong nó sẽ gọi .

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