2010-04-09 18 views
5

Tôi có một chuỗi thời gian của mẫu R:R: Tính đồng bằng châu thổ trong một chuỗi thời gian

> str(d) 
'data.frame': 5 obs. of 3 variables: 
$ date: POSIXct, format: "2010-03-04 20:47:00" "2010-03-04 21:47:00" ... 
$ x : num 0 10 11 15.2 20 
$ y : num 0 5 7.5 8.4 12.5 
> d 
       date x y 
1 2010-03-04 20:47:00 0.0 0.0 
2 2010-03-04 21:47:00 10.0 5.0 
3 2010-03-04 22:47:00 11.0 7.5 
4 2010-03-04 23:47:00 15.2 8.4 
5 2010-03-05 00:47:00 20.0 12.5 

Trong ví dụ này mẫu cho x và y được lấy mỗi giờ (nhưng vùng đồng bằng thời gian không được sửa chữa). Giá trị x và y luôn tăng lên (như bộ đếm milage trong ô tô). Tôi cần các vùng đồng bằng, bao nhiêu là sự tăng trưởng ở giữa, một cái gì đó như thế này:

1 2010-03-04 20:47:00 0.0 0.0 
2 2010-03-04 21:47:00 10.0 5.0 
3 2010-03-04 22:47:00 1.0 2.5 
4 2010-03-04 23:47:00 4.2 0.9 
5 2010-03-05 00:47:00 4.8 4.1 

Và tôi cũng cần những đồng bằng châu thổ mỗi thời gian (x và đồng bằng y, chia cho thời gian - đồng bằng mỗi giờ)

Làm cách nào để thực hiện điều này trong R?

Trả lời

5

Chỉ cần sử dụng một lần diff() chuyển sang một cấu trúc dữ liệu thời gian-aware như zoo:

> library(zoo) 
> DF <- data.frame(date=Sys.time() + 0:4*3600, x = cumsum(runif(5)*10), 
               y=cumsum(runif(5)*20)) 
> DF 
       date  x  y 
1 2010-04-09 15:14:54 9.6282 14.709 
2 2010-04-09 16:14:54 12.4041 28.665 
3 2010-04-09 17:14:54 18.1643 34.244 
4 2010-04-09 18:14:54 27.5785 41.028 
5 2010-04-09 19:14:54 33.2779 57.020 
> zdf <- zoo(DF[,-1], order.by=DF[,1]) 
> diff(zdf) 
         x  y 
2010-04-09 16:14:54 2.7759 13.9556 
2010-04-09 17:14:54 5.7602 5.5792 
2010-04-09 18:14:54 9.4142 6.7844 
2010-04-09 19:14:54 5.6995 15.9919 
> 

Bạn có thể dễ dàng pad hàng đầu tiên trở lại, sáp nhập, ... vv - xem tài liệu tuyệt vời cho gói zoo để biết chi tiết.

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