valores una sirve recodificar que para factor etiquetar columna cambiar r time dataframe xts

una - para que sirve factor en r



¿Cómo puedo cambiar XTS a data.frame y mantener el índice en R? (5)

Tengo una serie de tiempo XTS en R del siguiente formato y estoy tratando de hacer algún procesamiento, subconjunto y reorganización antes de exportarlo como un CSV para trabajar en otro programa.

head(master_1) S_1 2010-03-03 00:00:00 2.8520 2010-03-03 00:30:00 2.6945 2010-03-03 01:00:00 2.5685 2010-03-03 01:30:00 2.3800 2010-03-03 02:00:00 2.2225 2010-03-03 02:30:00 2.0650

y

str(master_1) An ‘xts’ object from 2010-03-03 to 2010-05-25 08:30:00 containing: Data: num [1:4000, 1] 2.85 2.69 2.57 2.38 2.22 ... - attr(*, "dimnames")=List of 2 ..$ : NULL ..$ : chr "S_1" Indexed by objects of class: [POSIXt,POSIXct] TZ: Original class: ''zoo'' xts Attributes: List of 1 $ dateFormat: chr "Date"

Y me gustaría convertir esto a un data.frame para poder manipularlo más fácilmente y luego exportarlo a otro programa. Sin embargo, cuando uso test1 <- as.data.frame(master_1) el test1 tiene el índice (es decir, las fechas y horas) visible,

head(test1) S_1 2010-03-03 00:00:00 2.8520 2010-03-03 00:30:00 2.6945 2010-03-03 01:00:00 2.5685 2010-03-03 01:30:00 2.3800 2010-03-03 02:00:00 2.2225 2010-03-03 02:30:00 2.0650

Pero el índice no se muestra,

str(test1) ''data.frame'': 4000 obs. of 1 variable: $ S_1: num 2.85 2.69 2.57 2.38 2.22 ...

Y escribir un csv write.csv(master_1, file="master_1.csv") no incluye la hora o la fecha. ¿Por qué es esto y cómo puedo incluir los datos de datos / tiempo como una columna, por lo que se usa en otros comandos R y se exporta correctamente?

Gracias por cualquier ayuda.


Desde 1.9.6 Puede convertir directamente de / a xts sin perder la clase de índice. Tan simple como:

as.data.table(master_1)

El índice se agrega como la primera columna en la data.table resultados, conserva las clases de Date índice o POSIXct .


Eso es porque las fechas son rownames en su data.frame. Necesitas hacer una columna separada.

Prueba esto:

data.frame(date=index(master_1), coredata(master_1))


Esto es un poco de una barra lateral, pero la función ggplot2 fortify(...) en el paquete ggplot2 convertirá una variedad de objetos en marcos de datos adecuados para usar en ggplot(...) , incluidos los objetos xts .

library(xts) set.seed(1) # for reproducible example master_1 <- xts(rnorm(10,mean=2,sd=0.1),as.POSIXct("2010-03-03")+30*(0:9)) library(ggplot2) df <- fortify(master_1) head(df) # Index master_1 # 1 2010-03-03 00:00:00 1.937355 # 2 2010-03-03 00:00:30 2.018364 # 3 2010-03-03 00:01:00 1.916437 # 4 2010-03-03 00:01:30 2.159528 # 5 2010-03-03 00:02:00 2.032951 # 6 2010-03-03 00:02:30 1.917953

Entonces, si ya está usando gggplot esta es una manera fácil de hacerlo. Tenga en cuenta que el índice va a una columna llamada Index (capital "I").


Shane tiene razón. es posible que esté buscando el índice (su xts). Aquí hay un ejemplo reproducible.

library(xts) example(xts) x = head(sample.xts) datefield = index(x) newdf = data.frame(x,datefield)

Entonces debería poder simplemente exportarlo a un csv. Por supuesto, también puedes cambiar el nombre de las filas.


Una forma elegante de cambiar XTS a data.frame:

myDF <- as.data.frame(as.matrix(myXTS))