将带有日期列的数据框转换为时间序列

roi*_*uez 56 r xts

我有一个包含以下数据的数据框:

>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
...
Run Code Online (Sandbox Code Playgroud)

如您所见,我的DATE列表示日期(yyyyMMdd),而我的CLOSE列表示价格.

我现在必须从PerformanceAnalytics包中计算出CalmarRatio.

我是R的新手,所以我无法理解所有内容,但从我用谷歌搜索到的那一刻,我看到该函数的R参数需要是一个类似时间序列的对象.

有没有什么方法可以将我的数组转换为时间序列对象,因为一个句点中的每个日期可能都没有数据(仅适用于我指定的数据)?

Jos*_*ich 50

您的DATE列可能表示日期,但实际上它是字符,因子,整数或数字向量.

首先,您需要将DATE列转换为Date对象.然后,您可以从data.frame 的CLOSEDATE列创建一个xts对象PRICE.最后,您可以使用xts对象来计算回报和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
Run Code Online (Sandbox Code Playgroud)

  • 对于完整的初学者:使用`xts`需要首先加载其库,使用`require('xts')` (13认同)

42-*_*42- 15

大多数人发现使用时间序列课是一个很大的痛苦.您应该考虑使用package zoo中的zoo类.它不会抱怨错过的时间,只会重复.PerformanceAnalytics函数几乎肯定会期待'zoo'或其后代类'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 
Run Code Online (Sandbox Code Playgroud)

  • 另请注意,`read.zoo`可以设置索引.这个变体有效:`read.zoo(PRICE,format ="%Y%m%d")`假设`PRICE`是一个有两个数字列的数据框(而不是数组或矩阵),这个也适用: `read.zoo(text ="... same.as.above ...",header = TRUE,format ="%Y%m%d")` (4认同)