2012-02-21 34 views
7

Tôi đang gặp vấn đề với việc trừ hai cột của một bảng bao gồm cả ngày và giờ trong một ô đơn lẻ.Trừ hai Cột Bao gồm cả Ngày và Giờ trong R

> TimeData 

DEPARTURE_TIME  LAB_TIME 
1/30/2010 4:18  1/30/2010 0:29 
1/30/2010 4:18  1/30/2010 0:29 
1/30/2010 6:49  1/30/2010 0:48 
1/30/2010 6:49  1/30/2010 0:48 
1/30/2010 9:42  1/30/2010 1:29 
1/30/2010 9:42  1/30/2010 1:29 
1/30/2010 7:25  1/30/2010 1:16 

Tôi cần có sự khác biệt giữa Thời gian khởi hành và Giờ Lab trong giờ và phút.

Tôi có cần phải phân tách thời gian và ngày hoặc có cách nào để trừ dữ liệu theo cách này không?

Tôi thực sự đánh giá cao bất kỳ trợ giúp nào.

+0

Là những cột dây hoặc ngày (trong R)? –

Trả lời

12

Hãy thử TimeData$DEPARTURE_TIME - TimeData$LAB_TIME?

Tùy thuộc vào việc các cột xxx_TIME của bạn có là chuỗi hay bạn đã chuyển đổi chúng thành ngày giờ hay không.

Giả sử chúng là các chuỗi (chúng đã được đọc bằng cách sử dụng read.csv hoặc một cái gì đó tương tự); sau đó chuyển đổi chúng sang ngày thời gian đối tượng mà bạn có thể sử dụng as.POSIXct (xem ?as.POSIXctstrptime):

# convert the string columns to dates 
TimeData$DEPARTURE_TIME <- as.POSIXct(TimeData$DEPARTURE_TIME, 
             format='%m/%d/%Y %H:%M') 
TimeData$LAB_TIME  <- as.POSIXct(TimeData$LAB_TIME, 
             format='%m/%d/%Y %H:%M') 

Lưu ý format luận: trông giống như bạn đang ở tháng ngày/giờ/năm: phút (25 giờ đồng hồ) định dạng. Xem ?strptime để biết thêm thông tin về định dạng ngày.

Sau đó, để tính toán sự khác biệt, bạn có thể làm một trong hai:

diffs <- TimeData$DEPARTURE_TIME - TimeData$LAB_TIME 

mà chọn các đơn vị thời gian thích hợp cho bạn, OR để xác định giờ bạn có thể sử dụng difftime (xem ?difftime):

# like saying DEPARTURE_TIME-LAB_TIME but more control over the output 
diffs <- difftime(TimeData$DEPARTURE_TIME,TimeData$LAB_TIME,units="hours") 

Đối tượng kết quả diffs trông giống như sau:

> diffs 
Time differences in hours 
[1] 3.816667 3.816667 6.016667 6.016667 8.216667 8.216667 6.150000 
attr(,"tzone") 
[1] "" 

Để chỉ trích xuất phần số, hãy sử dụng as.numeric(diffs). Để chuyển đổi này vào một vector giờ và một vector phút ... tốt, phút 60 đến một giây, vv:

# use as.numeric(diffs) to retrieve just the vector. 
# let's convert to hours & minutes... 
diffs.hours <- floor(as.numeric(diffs)) 
diffs.minutes <- (as.numeric(diffs)%%1 * 60) 

Đem lại cho bạn:

> diffs.hours 
[1] 3 3 6 6 8 8 6 
> diffs.minutes 
[1] 49 49 1 1 13 13 9 
Các vấn đề liên quan