2010-12-14 38 views
5

Tạo đối tượng xts có hai hàng.Đặt chỉ mục xts

library(xts) 
junk<-xts(c(1,2),as.Date(c("2010-01-01","2010-05-01"))) 
junk 
>   [,1] 
> 2010-01-01 1 
> 2010-05-01 2 

Tại sao sau đây không thay đổi chỉ mục cho hàng đầu tiên?

time(junk[1])<-as.Date("2010-02-01") 
junk 
>   [,1] 
> 2010-01-01 1 
> 2010-05-01 2 

Tôi nhận thấy rằng các công trình sau đây, nhưng tại sao công việc trên không?

time(junk)[1]<-as.Date("2010-02-01") 
junk 
>   [,1] 
> 2010-02-01 1 
> 2010-05-01 2 

Cảm ơn,
Bill

Trả lời

2

Ngày tháng trong chuỗi thời gian không được tham chiếu với "[". Chúng giống như tên lửa trong các khung dữ liệu. Chúng được lưu trữ trong lá "index" của danh sách các thuộc tính. Bên cạnh đó, họ không thuộc về lớp ngày nhưng thay vì lớp DateTime vì vậy bạn cần phải có thể sử dụng POSIXct:

> attributes(junk)$index[1] <- as.POSIXct("2010-02-01") 
> junk 
      [,1] 
2010-02-01 1 
2010-05-01 2 

Edit: chính xác hơn các thuộc tính $ index là nội bộ trong vài giây nhưng phương pháp thời gian sẽ chấp nhận một loạt các lớp học chuyển nhượng.

+0

Tôi sẽ nhớ rằng hàm thuộc tính. Tôi vẫn đang nghiên cứu phương pháp đó ("thời gian <-"). Tôi có sử dụng as.POSIXct() thay vì as.Date() không? Hầu hết dữ liệu thời gian của tôi sẽ là dữ liệu hàng ngày hoặc hàng tháng (yêu cầu phút và giây là rất hiếm, nhưng có thể). –

+0

Trong trường hợp này, không cần thiết vì có một hàm <- function. Điều đó có nghĩa là lớp của đối tượng được chỉ định lần đầu tiên được đánh giá và khi nó thuộc lớp Date, nó sẽ được nhân với 24 * 60 * 60 và một offset được áp dụng trước khi bị nhét vào trong biểu diễn bên trong chỉ trong vài giây. –

2
time(junk[1]) <- as.Date("2010-02-01") 

Ở trên không thay đổi chỉ số hàng đầu tiên của junk vì Subsetting tạo ra một đối tượng mới - không có tham chiếu đến junk --và time<-.xts thay thế chỉ số của đối tượng mới.

+2

Trừ khi có phương thức <-. Xts thời gian. Nó không hiển thị nhưng không hiển thị với các phương thức ('time <-'). –

+0

@Dwin bắt tốt. Tôi đang nhìn vào 'thời gian', không phải' thời gian <-'. Đó là những gì tôi nhận được để đăng ngay trước khi đi ngủ. –

+0

Điều đó có ý nghĩa. Ngoài ra, trong tuyên bố thời gian (rác) [1] (đoạn cuối cùng của mã), là một đối tượng tập con mới được tạo ra có tham chiếu đến rác không? Và, tham chiếu đó buộc phải sửa đổi rác? –

7

Câu trả lời trực tiếp cho bài đăng là phép thuật nằm trong số attr<- như Josh nói. Việc đặt trước đối tượng đầu tiên chỉ đơn giản là tạo một đối tượng mới được xử lý kịp thời một lần là < - đã hoàn tất.

Ngoài ra, bạn có thể xem 'nội bộ' của chỉ mục qua chức năng .index(). Về cơ bản là một vectơ của kiểu double hoặc integer mà ánh xạ tới thời gian POSIXct - với một số thuộc tính được đính kèm. Lớp bạn đang gán sẽ tự động bị ép buộc qua lại. Điều này làm cho các bộ phận bên trong dễ bảo trì hơn - và cho phép bạn làm mọi thứ với bất kỳ lớp thời gian nào bạn cần bên ngoài.

Nói chung, Ngày sẽ là cách sạch nhất để giữ TZ và không gặp rắc rối ngoài kết hợp, nhưng hãy nhớ rằng chi phí của khía cạnh ẩn này là hàm index(). Điều này sẽ phải tạo lại đối tượng bạn mong đợi.

+0

Chào mừng bạn đến với stackoverflow, Jeff! – Shane

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