Convertir un bloc de données avec une colonne de date en une série de temps

J’ai un bloc de données avec les données suivantes:

>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 ... 

Comme vous pouvez le voir, ma colonne DATE représente une date (aaaaMMjj) et ma colonne CLOSE représente les prix.

Je dois maintenant calculer CalmarRatio, à partir du package PerformanceAnalytics.

Je suis nouveau sur R, donc je ne peux pas tout comprendre, mais de ce que j’ai googlé au moment, je vois que le paramètre R de cette fonction doit être un object de type chronologique.

Y a-t-il un moyen de convertir mon tableau en object série étant donné qu’il peut ne pas y avoir de données pour chaque date dans une période (uniquement pour celles que je spécifie)?

    Votre colonne DATE peut représenter une date, mais il s’agit en réalité d’un caractère, d’un facteur, d’un entier ou d’un vecteur numérique.

    Tout d’abord, vous devez convertir la colonne DATE en object Date . Vous pouvez ensuite créer un object xts à partir des colonnes CLOSE et DATE de votre PRICE data.frame. Enfin, vous pouvez utiliser l’object xts pour calculer les retours et le ratio 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 plupart des gens trouvent que travailler avec le cours des séries chronologiques est très pénible. Vous devriez envisager d’utiliser la classe zoo du zoo du package. Il ne se plaindra pas des moments manquants, mais uniquement des doublons. Les fonctions PerformanceAnalytics vont presque certainement attendre “zoo” ou sa classe descendante “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 

    Une solution alternative consiste à utiliser le package tidyquant , qui permet d’utiliser les fonctionnalités des packages financiers, y compris les fonctionnalités de séries chronologiques, avec les tidyquant de données. Les exemples suivants montrent comment obtenir le ratio Calmar pour plusieurs actifs. Les vignettes tidyquant donnent plus de détails sur l’utilisation du paquet.

     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