我有一个包含以下数据的数据框:
>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 的CLOSE和DATE列创建一个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)
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)