es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo convertir un data frame a xts

Tengo un marco de datos grande con fechas y datos. En cada columna impar tengo las fechas y en cada segunda columna el precio de la acción correspondiente. Me gustaría convertir cada par de columnas en un objeto xts separado. El marco de datos se ve así:

...1        Precio de la acción 
2021-11-09    72.5
2021-11-10    73.4
2021-11-15    72.9
etc           etc

Cuando llamo a la siguiente línea funciona bien:

xts(df[,2],order.by=df$...1)

Sin embargo, quiero usarlo en un bucle, así que prefiero usar

xts(df[,2],order.by=df[,1])

Pero esto lleva a un error. El orden requiere un objeto basado en el tiempo apropiado.

Cuando intento esto:

xts(df[,2],order.by=as.Date(df[,1]))

aparece “do not know how to convert ‘x’ to class “Date”” [“no se sabe cómo convertir ‘x’ a la clase “Date””]. No entiendo, ya que originalmente la primera columna está en formato POSIXct.

¿Podría alguien sugerirme una solución?

Gracias

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución es usar la función as.POSIXct(), la cual convierte las cadenas de fecha en objetos POSICct (es decir, un tipo específico de objeto basado en el tiempo que es compatible con xts).

    Aquí hay un ejemplo de código que utiliza un bucle para crear varios objetos xts a partir de los pares de columnas impar/par en el marco de datos:

    “`{r}
    library(xts)

    Marco de datos de ejemplo

    df <- data.frame(
    Fecha1 = c(“2021-11-09”, “2021-11-10”, “2021-11-15”),
    Precio1 = c(72.5, 73.4, 72.9),
    Fecha2 = c(“2021-11-09”, “2021-11-10”, “2021-11-15”),
    Precio2 = c(8.2, 8.5, 8.1),
    stringsAsFactors = FALSE
    )

    Recorra los pares de columnas impar/par y cree objetos xts

    for (i in seq(1, ncol(df), by = 2)) {
    # Extraer los pares de columnas impar/par
    fecha_col <- df[, i]
    precio_col <- df[, i+1]

    # Convierta las cadenas de fecha en objetos POSIXct
    fecha_posix <- as.POSIXct(fecha_col)

    # Crear objeto xts
    xts_obj <- xts(precio_col, order.by = fecha_posix)

    # Imprimir resumen del objeto xts
    cat(sprintf(“Creado objeto xts a partir de las columnas %d y %d:\n”, i, i+1))
    print(summary(xts_obj))
    cat(“\n”)
    }


    La salida debería mostrar que se crearon objetos xts correctamente a partir de los pares de columnas impar/par en el marco de datos:

    Creado objeto xts a partir de las columnas 1 y 2:
    [,1]
    Min. :72.50 Mode:logical
    1st Qu.:72.95 NA’s:0
    Median :73.40
    Mean :73.27
    3rd Qu.:73.35
    Max. :73.40

    Creado objeto xts a partir de las columnas 3 y 4:
    [,1]
    2021-11-09 8.2
    2021-11-10 8.5
    2021-11-15 8.1
    “`

Comments are closed.