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
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”)
}
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
“`