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))