2012-01-16 121 views
5

Trong hầu hết các trường hợp, chúng tôi chuyển đổi thời gian số thành định dạng posixct bằng R. Tuy nhiên, đôi khi, chúng tôi muốn so sánh điểm thời gian nào trước đó, sau đó chúng tôi muốn định dạng thời gian bằng số. Vì vậy, đó là câu hỏi khá thiết thực để chuyển đổi định dạng thời gian thành số. Ví dụ: tôi có định dạng dữ liệu như "2001-03-13 10:31:00",Chuyển đổi định dạng thời gian thành số bằng R

begin <- "2001-03-13 10:31:00" 

Sử dụng R, tôi muốn tìm hiểu cách chuyển nó thành số, ví dụ: thời gian Julian, giống như những giây trôi qua giữa 1970-01-01 00:00:00 và 2001-03-13 10:31:00.

Bạn có bất cứ đề xuất nào không?


Lịch Julian bắt đầu vào năm 45 trước Công Nguyên (709 AUC) như một cải cách lịch La Mã của Julius Caesar. Nó được chọn sau khi tham khảo ý kiến ​​với nhà thiên văn học Sosigenes của Alexandria và có lẽ được thiết kế để ước tính năm nhiệt đới (ít nhất là từ Hipparchus). thấy http://en.wikipedia.org/wiki/Julian_calendar

+0

Tôi không downvote nhưng tôi nghi ngờ nó đã được thực hiện vì không phù hợp bất cẩn giữa đầu vào và đầu ra của bạn. Có vẻ như bạn có thể hy vọng chỉ xóa dấu chấm câu trong một vector kiểu ký tự và bạn muốn: 20010313103100 có thể là một giá trị số nhưng ở moemnt nó rất không rõ ràng. –

+0

Câu trả lời của bạn hữu ích. Tôi sẽ sửa lại câu hỏi. –

+4

Nói chung, 'as.numeric' là một nơi đầu tiên tốt để chuyển nếu bạn muốn chuyển đổi một cái gì đó thành, tốt, một số. Bạn đã thử chưa – joran

Trả lời

6

Nếu bạn jsut muốn loại bỏ ":", "", và "-" từ một vector nhân vật thì đây sẽ đủ:

end <- gsub("[: -]", "" , begin, perl=TRUE) 
#> end 
#[1] "20010313103100" 

Bạn nên đọc phần khoảng 1/4 của đường xuống? regex về các lớp nhân vật . Vì "-" là đặc biệt trong ngữ cảnh đó với tư cách là toán tử phạm vi, nên nó cần phải được đặt đầu tiên hoặc cuối cùng.

Sau khi chỉnh sửa của bạn thì câu trả lời rõ ràng là những gì @joran viết, ngoại trừ việc bạn sẽ cần đầu tiên để chuyển đổi sang một lớp DateTime:

as.numeric(as.POSIXct(begin)) 
#[1] 984497460 

Điểm khác để làm cho là toán tử so sánh làm công việc cho các biến Date và DateTime được phân loại để chuyển đổi có thể không cần thiết chút nào. Này so sánh 'bắt đầu' để một thời gian một giây sau đó và chính xác báo cáo rằng bắt đầu sớm:

as.POSIXct(begin) < as.POSIXct(begin) +1 
#[1] TRUE 
+0

hoặc thường hơn 'gsub (" [^ [: chữ số:]] "," ", bắt đầu)' sẽ xóa bất kỳ thứ gì khác ngoài số. – kohske

3

Dựa trên câu hỏi sửa đổi này nên làm những gì bạn muốn:

begin <- "2001-03-13 10:31:00" 
as.numeric(as.POSIXct(begin)) 

Kết quả là một unix dấu thời gian, số giây kể từ thời đại, giả sử dấu thời gian nằm trong múi giờ địa phương.

0

Ví dụ từ ?as.POSIX giúp đỡ cho

as.POSIXct(strptime(begin, "%Y-%m-%d %H:%M:%S")) 

như vậy cho bạn nó sẽ là

as.numeric(as.POSIXct(strptime(begin, "%Y-%m-%d %H:%M:%S"))) 
Các vấn đề liên quan