2012-09-29 52 views
18

Tôi có dữ liệu với hơn 3 triệu bản ghi có start.time và end.time làm hai biến. 10 người đầu tiên bị ám ảnh như sau:tính chênh lệch thời gian trong R

start.date start.time end.date end.time 
1 2012-07-13 15:01:32 2012-07-13 15:02:42 
2 2012-07-05 18:26:31 2012-07-05 18:27:19 
3 2012-07-14 20:23:21 2012-07-14 20:24:11 
4 2012-07-29 16:09:54 2012-07-29 16:10:48 
5 2012-07-21 14:58:32 2012-07-21 15:00:17 
6 2012-07-04 15:36:31 2012-07-04 15:37:11 
7 2012-07-22 18:28:31 2012-07-22 18:28:50 
8 2012-07-09 21:08:42 2012-07-09 21:09:02 
9 2012-07-05 09:44:52 2012-07-05 09:45:05 
10 2012-07-02 18:50:47 2012-07-02 18:51:38 

Tôi cần tính chênh lệch giữa start.time và end.time.

tôi đã sử dụng đoạn mã sau:

mbehave11$diff.time <- difftime(mbehave11$end.time, mbehave11$start.time, units="secs") 

Nhưng tôi nhận được lỗi này:

Error in as.POSIXlt.character(x, tz, ...) : 
    character string is not in a standard unambiguous format 
In addition: Warning messages: 
1: In is.na.POSIXlt(strptime(xx, f <- "%Y-%m-%d %H:%M:%OS", tz = tz)) : 
    Reached total allocation of 1535Mb: see help(memory.size) 
+0

Bạn có thể cung cấp ví dụ tái sản xuất không? Bạn có thể đọc thông tin này để biết thêm thông tin về điều đó: http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Dason

Trả lời

32

Bạn phải biến chuỗi của bạn thành các đối tượng ngày trước khi bạn có thể làm ngày/giờ số học. Hãy thử điều này:

a) Đọc dữ liệu của bạn:

R> dat <- read.table(textConnection("start.date start.time end.date end.time 
2012-07-13 15:01:32 2012-07-13 15:02:42 
2012-07-05 18:26:31 2012-07-05 18:27:19 
2012-07-14 20:23:21 2012-07-14 20:24:11"), header=TRUE) 

b) Làm việc trên một quan sát:

R> strptime(paste(dat[,1], dat[,2]), "%Y-%m-%d %H:%M:%S") 
[1] "2012-07-13 15:01:32" "2012-07-05 18:26:31" "2012-07-14 20:23:21" 

c) Làm việc trên các thiết lập, chuyển đổi sang số:

R> as.numeric(difftime(strptime(paste(dat[,1],dat[,2]),"%Y-%m-%d %H:%M:%S"), 
         strptime(paste(dat[,3],dat[,4]),"%Y-%m-%d %H:%M:%S"))) 
[1] -70 -48 -50 
R> 
+0

nhưng kết quả có ý nghĩa gì? Tôi có nghĩa là kết quả -70 -48 -50 .. làm thế nào tôi có thể giải thích chúng như là sự khác biệt trong vài phút? – user1702490

+6

Xem 'trợ giúp (difftime)' - có một đối số đơn vị mặc định là thứ hai và bạn có thể ghi đè lên. Nhưng chỉ để kiểm tra, nhìn vào -70 ở dòng đầu tiên và nghĩ rằng sự khác biệt thời gian trong hàng đầu tiên của bạn thiết lập là: bảy mươi giây. Nếu bạn muốn minuts, sử dụng 'units =" min "'). Nó là dễ dàng. –

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