2012-12-19 34 views
5

Tôi đang cố gắng tìm ra những gì xts (hoặc sở thú) sử dụng như thời gian sau khi thực hiện một khoảng thời gian. Hãy xem xét những điều sau:Buộc tuần đầy đủ với apply.weekly()

> myTs = xts(1:10, as.Date(1:10, origin = '2012-12-1')) 
> apply.weekly(myTs, colSums) 
      [,1] 
2012-12-02 1 
2012-12-09 35 
2012-12-11 19 

Tôi nghĩ rằng '2012-12-02' có nghĩa là "cho tuần kết thúc 2012-12-02, tổng là 1". Vì vậy, về cơ bản thời gian là cuối tuần.

Nhưng vấn đề là với điều đó "2012/12/11" - Tôi nghĩ những gì nó làm là nói rằng 11 là ngày cuối cùng của tuần đã được trao, vì vậy nó đem lại cho rằng như thời gian .

Có cách nào để buộc nó cung cấp cho chủ nhật mà nó kết thúc, ngay cả khi ngày đó không được bao gồm trong tập dữ liệu?

Trả lời

3

Hãy thử điều này:

nextsun <- function(x) 7 * ceiling(as.numeric(x-0+4)/7) + as.Date(0-4) 
aggregate(myTs, nextsun, sum) 

nơi nextsun được bắt nguồn từ nextfri đang được đưa ra trong zoo quick reference bằng cách thay thế 5 (cho Thứ Sáu) với 0 (cho Chủ Nhật).

3

Đó là những tuần đầy đủ. Nó chỉ cho bạn thấy ngày quan sát cuối cùng. Xem ?endpoints (apply.weekly, về cơ bản là một trình bao bọc mỏng cho các điểm cuối).

apply.weekly 
function (x, FUN, ...) 
{ 
    ep <- endpoints(x, "weeks") 
    period.apply(x, ep, FUN, ...) 
} 
<environment: namespace:xts> 

Từ? Điểm cuối

điểm cuối trả về một vector số tương ứng với quan sát cuối cùng trong từng thời kỳ theo quy định của trên, với một số không thêm vào đầu của vector, và chỉ số của quan sát cuối cùng trong x tại kết thúc.

Giá trị hợp lệ cho đối số trên bao gồm: “us” (micro giây), “micro giây”, “ms” (mili giây), “mili giây”, “giây” (giây), “giây”, “phút” (phút), “phút”, “giờ”, “ngày”, “tuần”, “tháng”, “quý” và “năm”.

Câu trả lời cho câu hỏi thứ hai của bạn là không, không có tùy chọn để làm như vậy. Nhưng bạn luôn có thể chỉnh sửa ngày cuối cùng theo cách thủ công, nếu bạn định trình bày tất cả dữ liệu được gói gọn, tôi không thấy bất kỳ tác hại nào trong đó.

2

Không, bạn không thể buộc nó cung cấp cho bạn chủ nhật.

Bởi vì chỉ số về kết quả period.apply được cho bởi

ep <- endpoints(myTs,'weeks') 

myTs[ep] 
      [,1] 
2012-12-02 2 
2012-12-09 9 
2012-12-10 10 

Vì vậy, bạn cần phải thay đổi ngày cuối cùng. Thật không may xts không cung cấp tùy chọn này, bạn không thể thay đổi một giá trị của chỉ mục. Tôi không biết tại sao (có thể là một sự lựa chọn thiết kế có được chỉ số duy nhất)

ví dụ: Bạn có thể làm chảy:

ts.weeks <- apply.weekly(myTs, colSums) 
ts.weeks[length(ts.weeks)] <- last(index(myTs)) + 7-last(floor(diff(ep))) 
Các vấn đề liên quan