Saltar al contenido

¿Cómo convertir dataframe en series de tiempo?

Hola usuario de nuestra página web, tenemos la solución a tu pregunta, continúa leyendo y la obtendrás un poco más abajo.

Solución:

R tiene múltiples formas de representar series de tiempo. Dado que está trabajando con los precios diarios de las acciones, es posible que desee considerar que los mercados financieros están cerrados los fines de semana y los feriados laborales para que los días de negociación y los días calendario no sean los mismos. Sin embargo, es posible que deba trabajar con sus series de tiempo en términos de días de negociación y días calendario. Por ejemplo, los rendimientos diarios se calculan a partir de los precios de cierre diarios secuenciales, independientemente de si interviene un fin de semana. Pero es posible que también desee generar informes basados ​​en el calendario, como resúmenes de precios semanales. Por estas razones, el paquete xts, una extensión de zoo, se usa comúnmente con datos financieros en R. A continuación se muestra un ejemplo de cómo podría usarse con sus datos.

Suponiendo que los datos que se muestran en su ejemplo están en el marco de datos df

  library(xts)
  stocks <- xts(df[,-1], order.by=as.Date(df[,1], "%m/%d/%Y"))
#
#  daily returns
#
   returns <- diff(stocks, arithmetic=FALSE ) - 1
#
#  weekly open, high, low, close reports
#
   to.weekly(stocks$Hero_close, name="Hero")

que da la salida

           Hero.Open Hero.High Hero.Low Hero.Close
2013-03-15    1669.1   1684.45   1669.1    1684.45
2013-03-22    1690.5   1690.50   1623.3    1659.60
2013-03-28    1617.7   1617.70   1542.0    1542.00

Aporte. Comenzaremos con el texto de la entrada que se muestra en la pregunta, ya que la pregunta no proporcionó la entrada csv:

Lines <- "Dates   Bajaj_close Hero_close
3/14/2013   1854.8  1669.1
3/15/2013   1850.3  1684.45
3/18/2013   1812.1  1690.5
3/19/2013   1835.9  1645.6
3/20/2013   1840    1651.15
3/21/2013   1755.3  1623.3
3/22/2013   1820.65 1659.6
3/25/2013   1802.5  1617.7
3/26/2013   1801.25 1571.85
3/28/2013   1799.55 1542"

zoo."ts" Las series de clases normalmente no representan índices de fecha, pero podemos crear una serie de zoológico que sí lo haga (consulte el paquete de zoológico):

library(zoo)
z <- read.zoo(text = Lines, header = TRUE, format = "%m/%d/%Y")

Alternativamente, si ya ha leído esto en un marco de datos DF entonces podría convertirse en zoológico como se muestra en la segunda línea a continuación:

DF <- read.table(text = Lines, header = TRUE)
z <- read.zoo(DF, format = "%m/%d/%Y")

En cualquier caso arriba z ia una serie de zoológico con un "Date" índice de tiempo de clase. También se podría crear la serie zoo, zzque utiliza 1, 2, 3, ... como índice de tiempo:

zz <- z
time(zz) <- seq_along(time(zz))

ts. Cualquiera de estos podría convertirse en un "ts" serie de clases:

as.ts(z)
as.ts(zz)

El primero tiene un índice de tiempo que es el número de días desde la Época (1 de enero de 1970) y tendrá NA para los días faltantes y el segundo tendrá 1, 2, 3, ... como índice de tiempo y no NA.

Serie mensual. Típicamente "ts" Las series se utilizan para series mensuales, trimestrales o anuales. Por lo tanto, si tuviéramos que agregar la entrada en meses, podríamos representarla razonablemente como un "ts" serie:

z.m <- as.zooreg(aggregate(z, as.yearmon, mean), freq = 12)
as.ts(z.m)

Llegó tarde a la fiesta, pero el paquete tsbox está diseñado para realizar conversiones como esta. Para convertir sus datos en un ts-objeto, puedes hacer:

dta <- data.frame(
  Dates = c("3/14/2013", "3/15/2013", "3/18/2013", "3/19/2013"),
  Bajaj_close = c(1854.8, 1850.3, 1812.1, 1835.9),
  Hero_close = c(1669.1, 1684.45, 1690.5, 1645.6)
)

dta
#>       Dates Bajaj_close Hero_close
#> 1 3/14/2013      1854.8    1669.10
#> 2 3/15/2013      1850.3    1684.45
#> 3 3/18/2013      1812.1    1690.50
#> 4 3/19/2013      1835.9    1645.60

library(tsbox)
ts_ts(ts_long(dta))
#> Time Series:
#> Start = 2013.1971293045 
#> End = 2013.21081883954 
#> Frequency = 365.2425 
#>          Bajaj_close Hero_close
#> 2013.197      1854.8    1669.10
#> 2013.200      1850.3    1684.45
#> 2013.203          NA         NA
#> 2013.205          NA         NA
#> 2013.208      1812.1    1690.50
#> 2013.211      1835.9    1645.60

Analiza automáticamente las fechas, detecta la frecuencia y hace explícitos los valores que faltan en los fines de semana. Con ts_puede convertir los datos a cualquier otra clase de serie temporal.

valoraciones y reseñas

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *