2010-12-14 12 views
5

Genere un objeto xts con dos filas.Configuración de un índice 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 

¿Por qué los siguientes elementos no cambian el índice de la primera fila?

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

Me doy cuenta de que el siguiente funciona, pero ¿por qué no funciona lo anterior?

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

Gracias,
Bill

Respuesta

2

Las fechas en las series de tiempo no se hace referencia a "[". Son más como nombres de fila en dataframes. Se almacenan en la hoja de "índice" de la lista de atributos. Además de eso, no son de la clase Date, sino más bien la clase DateTime para que necesidad de pueden utilizar POSIXct:

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

Editar: con mayor precisión el índice de $ atributo es internamente en cuestión de segundos, pero el método Time Will aceptar una variedad de clases de tareas

+0

Recordaré esa función de atributos. Todavía estoy trabajando en ese método ("tiempo <-"). ¿Es una buena idea para mí usar as.POSIXct() en lugar de as.Date()? La mayoría de los datos de mi tiempo serán datos diarios o mensuales (los requisitos de minutos y segundos son raros, pero posibles). –

+0

En este caso no es necesario, ya que hay una función de tiempo <-. Eso significa que la clase del objeto que se está asignando se evalúa primero y cuándo de la clase Fecha que se multiplicará correctamente por 24 * 60 * 60 y se aplicará un desplazamiento antes de rellenar la representación interna que está en segundos. –

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

Lo anterior no cambia el índice de la primera fila de junk porque subsetting crea un nuevo objeto - sin ninguna referencia a junk -y time<-.xts reemplaza el índice del nuevo objeto.

+2

Excepto que hay un método time <-. Xts. No es visible pero aparece con métodos ('tiempo <-'). –

+0

@Dwin buena captura. Estaba mirando 'tiempo', no' tiempo <-'. Eso es lo que recibo por publicar justo antes de acostarme. –

+0

Eso tiene sentido. Además, en la declaración de tiempo (basura) [1] (el último trozo de código), ¿se creó un nuevo objeto de subconjunto que hace referencia a basura? Y, ¿esa referencia obliga a la basura a ser modificada? –

7

La respuesta directa a la publicación es que la magia está dentro de attr<-, como dice Josh. La subconjunto del objeto primero simplemente crea un nuevo objeto que se elimina de inmediato una vez que se completa el tiempo < -.

Además, puede ver las 'partes internas' del índice a través de la función .index(). Esencialmente un vector de tipo double o entero que se asigna a POSIXct time - con algunos atributos adjuntos. La clase que estás asignando se coacciona automáticamente hacia adelante y hacia atrás. Esto hace que las funciones internas sean más fáciles de mantener, y le permite hacer cosas con cualquier clase de tiempo que necesite fuera de ella.

En general, la fecha será la forma más limpia de mantener los problemas de TZ y segundos fuera de la mezcla, pero tenga en cuenta que el costo de este aspecto oculto es la función index(). Esto deberá recrear el objeto que espera.

+0

¡Bienvenido a stackoverflow, Jeff! – Shane

Cuestiones relacionadas