Convertir dataframe con columna de fecha a series de tiempo

Tengo un dataframe con los siguientes datos:

>PRICE DATE CLOSE 1 20070103 54.700 2 20070104 54.770 3 20070105 55.120 4 20070108 54.870 5 20070109 54.860 6 20070110 54.270 7 20070111 54.770 8 20070112 55.360 9 20070115 55.760 ... 

Como puede ver, mi columna DATE representa una fecha (aaaaMMdd) y mi columna CLOSE representa los precios.

Ahora debo calcular CalmarRatio, del paquete PerformanceAnalytics.

Soy nuevo en R, así que no puedo entender todo, pero de lo que he buscado en Google hasta el momento en que veo que el parámetro R para esa función necesita ser un objeto similar a una serie de tiempo.

¿Hay alguna forma de que pueda convertir mi matriz en un objeto de serie temporal dado que puede que no haya datos para cada fecha en un período (solo para los que especifico)?

Su columna de DATE puede representar una fecha, pero en realidad es un carácter, un factor, un número entero o un vector numérico.

En primer lugar, debe convertir la columna DATE en un objeto Date . A continuación, puede crear un objeto xts a partir de las columnas CLOSE y DATE de su data.frame de PRICE . Finalmente, puede usar el objeto xts para calcular devoluciones y la proporción de Calmar.

 PRICE <- structure(list( DATE = c(20070103L, 20070104L, 20070105L, 20070108L, 20070109L, 20070110L, 20070111L, 20070112L, 20070115L), CLOSE = c(54.7, 54.77, 55.12, 54.87, 54.86, 54.27, 54.77, 55.36, 55.76)), .Names = c("DATE", "CLOSE"), class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9")) library(PerformanceAnalytics) # loads/attaches xts # Convert DATE to Date class PRICE$DATE <- as.Date(as.character(PRICE$DATE),format="%Y%m%d") # create xts object x <- xts(PRICE$CLOSE,PRICE$DATE) CalmarRatio(Return.calculate(x)) # [,1] # Calmar Ratio 52.82026 

La mayoría de las personas consideran que trabajar con la clase de series temporales es un gran problema. Debes considerar usar la clase de zoo del paquete zoo. No se quejará de los tiempos perdidos, solo de los duplicados. Las funciones de PerformanceAnalytics casi seguramente van a esperar ‘zoo’ o su clase descendiente ‘xts’.

 pricez <- read.zoo(text=" DATE CLOSE 1 20070103 54.700 2 20070104 54.770 3 20070105 55.120 4 20070108 54.870 5 20070109 54.860 6 20070110 54.270 7 20070111 54.770 8 20070112 55.360 9 20070115 55.760 ") index(pricez) <- as.Date(as.character(index(pricez)), format="%Y%m%d") pricez 2007-01-03 2007-01-04 2007-01-05 2007-01-08 2007-01-09 2007-01-10 2007-01-11 2007-01-12 2007-01-15 54.70 54.77 55.12 54.87 54.86 54.27 54.77 55.36 55.76 

Una solución alternativa es usar el paquete tidyquant , que permite que la funcionalidad de los paquetes financieros, incluida la funcionalidad de series de tiempo, se use con marcos de datos. Los siguientes ejemplos muestran cómo puede obtener la relación de Calmar para múltiples activos. Las viñetas de tidyquant incluyen más detalles sobre cómo usar el paquete.

 library(tidyquant) # Get prices price_tbl <- c("FB", "AMZN", "NFLX", "GOOG") %>% tq_get(get = "stock.prices", from = "2010-01-01", to = "2016-12-31") price_tbl #> # A tibble: 6,449 × 8 #> symbol date open high low close volume adjusted #>         #> 1 FB 2012-05-18 42.05 45.00 38.00 38.23 573576400 38.23 #> 2 FB 2012-05-21 36.53 36.66 33.00 34.03 168192700 34.03 #> 3 FB 2012-05-22 32.61 33.59 30.94 31.00 101786600 31.00 #> 4 FB 2012-05-23 31.37 32.50 31.36 32.00 73600000 32.00 #> 5 FB 2012-05-24 32.95 33.21 31.77 33.03 50237200 33.03 #> 6 FB 2012-05-25 32.90 32.95 31.11 31.91 37149800 31.91 #> 7 FB 2012-05-29 31.48 31.69 28.65 28.84 78063400 28.84 #> 8 FB 2012-05-30 28.70 29.55 27.86 28.19 57267900 28.19 #> 9 FB 2012-05-31 28.55 29.67 26.83 29.60 111639200 29.60 #> 10 FB 2012-06-01 28.89 29.15 27.39 27.72 41855500 27.72 #> # ... with 6,439 more rows # Convert to period returns return_tbl <- price_tbl %>% group_by(symbol) %>% tq_transmute(ohlc_fun = Ad, mutate_fun = periodReturn, period = "daily") return_tbl #> Source: local data frame [6,449 x 3] #> Groups: symbol [4] #> #> symbol date daily.returns #>    #> 1 FB 2012-05-18 0.00000000 #> 2 FB 2012-05-21 -0.10986139 #> 3 FB 2012-05-22 -0.08903906 #> 4 FB 2012-05-23 0.03225806 #> 5 FB 2012-05-24 0.03218747 #> 6 FB 2012-05-25 -0.03390854 #> 7 FB 2012-05-29 -0.09620809 #> 8 FB 2012-05-30 -0.02253811 #> 9 FB 2012-05-31 0.05001770 #> 10 FB 2012-06-01 -0.06351355 #> # ... with 6,439 more rows # Calculate performance return_tbl %>% tq_performance(Ra = daily.returns, performance_fun = CalmarRatio) #> Source: local data frame [4 x 2] #> Groups: symbol [4] #> #> symbol CalmarRatio #>   #> 1 FB 0.50283172 #> 2 AMZN 0.91504597 #> 3 NFLX 0.14444744 #> 4 GOOG 0.05068483