Search code examples
rxtsperformanceanalytics

Convert tibble to xts for analysis with performanceanalytics package


I have a tibble with a date and return column, that looks as follows:

> head(return_series)
# A tibble: 6 x 2
  date      return
  <chr>      <dbl>
1 2002-01  0.0292 
2 2002-02  0.0439 
3 2002-03  0.0240 
4 2002-04  0.00585
5 2002-05 -0.0169 
6 2002-06 -0.0686 

I first add the day to the date column with the following code:

return_series$date <- as.Date(as.yearmon(return_series$date))

# A tibble: 6 x 2
  date         return
  <date>        <dbl>
1 2002-01-01  0.0292 
2 2002-02-01  0.0439 
3 2002-03-01  0.0240 
4 2002-04-01  0.00585
5 2002-05-01 -0.0169 
6 2002-06-01 -0.0686 

My goal is to convert the return_series tibble to xts data to use it for further analysis with the PerformanceAnalytics package. But when I use the command as.xts I receive the following error:

Error in as.POSIXlt.character(x, tz, ...) : 
  character string is not in a standard unambiguous format

How can I change the format to xts or is there an other possibility to work with the PerformanceAnalytics package instead of converting to xts?

Thank you very much for your help!


Solution

  • You need to follow the xts documentation more closely:

    > tb <- as_tibble(data.frame(date=as.Date("2002-01-01") + (0:5)*30, 
    +                            return=rnorm(6)))
    > tb
    # A tibble: 6 × 2
      date       return
      <date>      <dbl>
    1 2002-01-01  0.223
    2 2002-01-31 -0.352
    3 2002-03-02  0.149
    4 2002-04-01  1.42 
    5 2002-05-01 -1.04 
    6 2002-05-31  0.507
    > 
    > x <- xts(tb[,-1], order.by=as.POSIXct(tb[[1]]))
    > x
                           return
    2001-12-31 18:00:00  0.222619
    2002-01-30 18:00:00 -0.352288
    2002-03-01 18:00:00  0.149319
    2002-03-31 18:00:00  1.421967
    2002-04-30 19:00:00 -1.035087
    2002-05-30 19:00:00  0.507046
    > 
    

    An xts object prefers a POSIXct datetime object, which you can convert from a Date object. For a (closely-related) zoo object you could keep Date.