Tengo una XTS unicc en R de el siguiente formato y estoy tratando de hacer algún tipo de procesamiento, subconjunto y re-organización antes de exportar como un archivo 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 este tipo de datos.marco para que yo pueda manipular más fácilmente y, a continuación, exportar 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 está demostrado,

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

Y escritura de un archivo 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/datos en tiempo como una columna, por lo que se utiliza en otros comandos de R y exportado correctamente?

Gracias por la ayuda.

6 Comentarios

  1. 50

    Eso es porque las fechas son rownames en sus datos.marco. Usted necesita para hacer de ellos una columna separada.

    Intente esto:

     data.frame(date=index(master_1), coredata(master_1))
    • Este es correcta. Para responder a la segunda pregunta: write.csv no incluye el índice, ya que el índice es un xts atributo, no rowname. Uso write.zoo lugar.
    • Gracias Shane y Josué, que me ayuda a ver donde he estado pasando mal.
    • data.frame(date=index(master_1), value=coredata(master_1)[,]) para cambiar el nombre de la variable en una sola vez.
    • Saludos, a mí me funciona. library('magrittr'); master_1 %>% data.frame %>% data.frame(Date = rownames(.), .) a veces el trabajo a veces no funcionan.
  2. 13

    Esto es un poco de una barra lateral, pero el fortify(...) función en el paquete ggplot2 va a convertir en una gran variedad de objetos para las tramas de datos adecuado para su uso en ggplot(...), incluyendo xts objetos.

    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

    Así que si usted está utilizando ya gggplot esta es una manera fácil de hacerlo. Tenga en cuenta que el índice entra en una columna denominada Index (mayúscula «I»).

  3. 5

    Desde 1.9.6 Usted puede convertir directamente desde/al xts sin perder el índice de la clase. Tan simple como:

    as.data.table(master_1)

    El índice se agrega en la primera columna en el resultado data.table, mantiene un índice de Date o POSIXct clases.

  4. 2

    Shane es el adecuado. usted podría estar buscando índice(su xts). He aquí un reproducible ejemplo.

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

    A continuación, usted debe ser capaz de simplemente exportar a un archivo csv. Por supuesto, usted puede cambiar el nombre de las filas, también.

    • eh, gracias Joshua por lo que NO es un rowname 🙂
    • Gracias ran2 para el ejemplo. También puedo usar rownames(x) si x no es un XTS objeto.
  5. 0

    Puede convertir un xts objeto de datos.marco que incluye el índice como una columna denominada «Índice» con zoo::fortify.zoo().

    Usted no necesita ggplot2, pero esto todavía funciona si usted tiene xts (o zoológico) y ggplot2 cargado.

    Por ejemplo:

    library(xts)
    data(sample_matrix)
    x <- as.xts(sample_matrix, dateFormat = "Date")
    my_df <- fortify.zoo(x)
    head(my_df)
    #        Index     Open     High      Low    Close
    # 1 2007-01-02 50.03978 50.11778 49.95041 50.11778
    # 2 2007-01-03 50.23050 50.42188 50.23050 50.39767
    # 3 2007-01-04 50.42096 50.42096 50.26414 50.33236
    # 4 2007-01-05 50.37347 50.37347 50.22103 50.33459
    # 5 2007-01-06 50.24433 50.24433 50.11121 50.18112
    # 6 2007-01-07 50.13211 50.21561 49.99185 49.99185
    str(my_df)
    # 'data.frame': 180 obs. of  5 variables:
    #  $ Index: Date, format: "2007-01-02" "2007-01-03" ...
    #  $ Open : num  50 50.2 50.4 50.4 50.2 ...
    #  $ High : num  50.1 50.4 50.4 50.4 50.2 ...
    #  $ Low  : num  50 50.2 50.3 50.2 50.1 ...
    #  $ Close: num  50.1 50.4 50.3 50.3 50.2 ...
  6. -3

    Una forma elegante para cambiar XTS a los datos.marco:

    myDF <- as.data.frame(as.matrix(myXTS))
    • No hay necesidad de as.matrix, y esto no responde a la Pregunta: «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/datos en tiempo como una columna, por lo que se utiliza en otros comandos de R y exportado correctamente?»

Dejar respuesta

Please enter your comment!
Please enter your name here