2017-02-09 23 views
6

Tôi có một vấn đề với các ngày trong R. Xác định T1 và T2 như ngày ở định dạng POSIXct hoặc POSIXlt với 6 giây phân đoạn:Sự khác nhau giữa ngày tháng trong R

op <- options(digits.secs = 6) 
T1 = strptime("2015.10.10 12:00:00.150150", "%Y.%m.%d %H:%M:%OS") 
T2 = strptime("2015.10.10 16:30:15.212412", "%Y.%m.%d %H:%M:%OS") 

Làm thế nào để có được sự khác biệt giữa T1 và T2 trong này định dạng:

format = "%H:%M:%OS" 

Ví dụ chênh lệch giữa ngày được xác định là:

diff = "04:30:15.062262" 

tôi đã cố gắng tiếp cận khác es, nhưng nó không thành công.

nỗ lực của tôi:

T1 = strptime("2015.10.10 12:00:00.150150", "%Y.%m.%d %H:%M:%OS") 
T2 = strptime("2015.10.10 16:30:15.212412", "%Y.%m.%d %H:%M:%OS") 
h = difftime(T2,T1, units = "hours") 
m = difftime(T2,T1, units = "mins") 
s = difftime(T2,T1, units = "secs") 

Nhưng tôi không biết làm thế nào để có được fractionals.

+3

Xin chỉ cho chúng tôi những gì bạn đã cố gắng. Sau đó, chúng tôi biết nếu chúng ta phải tinh chỉnh giải pháp hiện tại của bạn hoặc cung cấp một giải pháp hoàn toàn mới. Như một mẹo chung, tôi sử dụng gói 'lubridate' cho mọi thứ liên quan đến thời gian và ngày tháng. Tôi nghĩ nghiên cứu các tài liệu của gói đó sẽ giúp bạn khá xa. –

+0

Hm, đó là một câu hỏi hay! Tôi mong đợi 'as.difftime (T2 - T1, format = '% H:% M:% OS')' để làm việc, nhưng nó không phải là. Tôi không hiểu phiếu giảm giá ... – drmariod

+0

Với 'lubridate' có một hàm tốt để có được kết quả tương tự nhưng không chính xác cùng định dạng ...' lubridate :: seconds_to_period (difftime (T2, T1, units = ' secs ')) ' – drmariod

Trả lời

6

mã là tự giải thích được

x <- as.numeric(difftime(T2,T1,units = "sec")) # diff in sec 
hrs <- floor(x/3600) # get the hours 
x <- x%%3600   # update the x after removing the hrs(in sec) 
min <- floor(x/60) # get the minutes 
sec <- x%%60   # get the sec 

paste(hrs,min,sec,sep= ":") 
# [1] "4:30:15.0622620582581" 
+1

Tôi chỉ cần 6 giây, nhưng đơn giản là cắt chuỗi này. Cảm ơn bạn, nó hoạt động. –

+1

@AslanBayramkulov yeah ... 'sprintf',' format() 'tất cả sẽ giúp bạn! –

+0

@AslanBayramkulov kiểm tra tâm [this] (http://stackoverflow.com/help/someone-answers) –

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