2015-05-28 18 views
9

Tôi muốn trừ thành POSIXct. Tôi có thể làm điều này nhưng tùy thuộc vào hàng đầu tiên (tôi đoán?) Sự khác biệt sẽ là trong vài giây hoặc vài phút. Dưới đây bạn sẽ nhìn thấy diff đầu tiên là chỉ trong vài giây và diff thứ hai là trong vài phút vì tôi đã thay đổi chênh lệch thời gian trong hàng đầu tiên:Cách tạo chênh lệch thời gian trong cùng một đơn vị khi trừ POSIXct

#diff in seconds because 1st row time diff is small? 
t1<- as.POSIXct(c("2015-02-02 20:18:03 00:00:00", "2015-02-02 20:17:02 00:00:00"),"GMT") 
t2<- as.POSIXct(c("2015-02-02 20:18:02 00:00:00","2015-02-02 20:18:02 00:00:00"),"GMT") 
d<-data.frame(t1= t1, t2= t2) 
d$t1-d$t2 


#diff in seconds because 1st row time diff is larger? 
t1<- as.POSIXct(c("2015-02-02 20:13:03 00:00:00", "2015-02-02 20:17:02 00:00:00"),"GMT") 
t2<- as.POSIXct(c("2015-02-02 20:18:02 00:00:00","2015-02-02 20:18:02 00:00:00"),"GMT") 
d<-data.frame(t1= t1, t2= t2) 
d$t1-d$t2 

kết quả:

> #diff in seconds because 1st row time diff is small? 
> t1<- as.POSIXct(c("2015-02-02 20:18:03 00:00:00", "2015-02-02 20:17:02 00:00:00"),"GMT") 
> t2<- as.POSIXct(c("2015-02-02 20:18:02 00:00:00","2015-02-02 20:18:02 00:00:00"),"GMT") 
> d<-data.frame(t1= t1, t2= t2) 
> d$t1-d$t2 
Time differences in secs 
[1] 1 -60 
> 
> 
> #diff in seconds because 1st row time diff is larger? 
> t1<- as.POSIXct(c("2015-02-02 20:13:03 00:00:00", "2015-02-02 20:17:02 00:00:00"),"GMT") 
> t2<- as.POSIXct(c("2015-02-02 20:18:02 00:00:00","2015-02-02 20:18:02 00:00:00"),"GMT") 
> d<-data.frame(t1= t1, t2= t2) 
> d$t1-d$t2 
Time differences in mins 
[1] -4.983333 -1.000000 

Tôi muốn sự khác biệt để LUÔN LUÔN là trong vài giây bất kể sự khác biệt hàng đầu tiên là gì. Có cách nào để thực hiện điều này không?

Cảm ơn bạn.

+3

'difftime (t1, t2, đơn vị = "giây") ' –

+2

Hoặc, nếu bạn muốn sử dụng '-' thay vì' difftime', thay đổi đơn vị thông qua 'đơn vị <-'. Ví dụ: 'x <-d $ t1-d $ t2; đơn vị (x) <- "giây" ' – nicola

+2

@ user20650, Ok đã thêm. Hy vọng nicola không quan tâm tôi pha trộn bình luận của mình quá. –

Trả lời

14

Bạn có thể sử dụng difftime cho rằng đề xuất cho phép bạn chỉ định các đơn vị đo lường, ví dụ

difftime(t1, t2, units = "secs") 

Một cách khác (như đã đề cập bởi @nicola và hiện diện trong cùng một tài liệu) là để tận dụng lợi thế của thực tế là - có một phương pháp -.POSIXt và ghi đè lên các đơn vị đo lường sau phẫu thuật trừ sử dụng phương pháp thay thế units<-

res <- t1 - t2 
units(res) <- "secs" 
+0

đơn vị (res) <- "secs" có vẻ không chính xác. nó cũng sẽ đọc 6 ngày là 6 giây – HappyCoding

+0

@HappyCoding Không chắc chắn ý của bạn là gì. 'res <- as.POSIXct (" 2015-05-02 20:18:02 00:00:00 ") - as.POSIXct (" 2015-02-02 20:18:02 00:00:00 "); đơn vị (res) <- "secs" 'có vẻ hoạt động tốt. –

+0

có, ở trên có thể hoạt động. Lỗi của tôi. có vẻ như nó chỉ có thể làm việc với phần tử thay vì vector hoặc khung dữ liệu. ví dụ mã của tôi '' '> res <- as.POSIXct (" 2015-05-02 20:18:02 00:00:00 ") - as.POSIXct (" 2015-02-02 20:18:02 00: 00:00 ") > res <- rbind (res, res) > as.numeric (res, units =" secs ")' '' – HappyCoding

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