我正在处理股票回报的时间序列。数据包括数千只股票以及1985-2010年期间每只股票的日收益。由于暂停交易而缺少回报。对于每只股票,我试图使用上一年的收益来计算每个月末(数据集中每个月的最后一个交易日)的收益变动幅度。我有一些数据:
date name return
1985-01-01 A -0.044
1985-01-01 C 0.038
1985-01-02 A 0.041
1985-01-02 B -0.005
1985-01-02 C -0.052
1985-01-03 B 0.018
1985-01-03 C -0.034
请注意,公司B在1985-01-01没有进行交易,因此当天没有退货数据。我查找了一些有用的软件包,例如TTR,zoo,xts。但是,所有功能都需要输入每年的期间数,每个库存中的数字都不同。我的模糊想法是,首先使用xts中的split来按公司名称拆分数据,然后应用终结点函数来查找每月的最后一天。我被困在那里。由于我的数据集很大,因此我希望快速使用某些方法。谢谢!
答案 0 :(得分:1)
假定末尾的注释中可重复显示的数据,并假定每个日期至少出现在一只股票中(但不必出现在任何特定的股票中)。 252通常使用一年,对于大多数用途来说可能足够接近。但是,考虑到问题中数据的长度,我们在此示例中使用2:
library(zoo)
z <- read.zoo(DF, split = "name")
r <- rollapplyr(z, 2, sd, na.rm = TRUE)
aggregate(r, as.yearmon, tail, 1)
## A B C
## Jan 1985 NA 0.01626346 0.01272792
Lines <- "
date name return
1985-01-01 A -0.044
1985-01-01 C 0.038
1985-01-02 A 0.041
1985-01-02 B -0.005
1985-01-02 C -0.052
1985-01-03 B 0.018
1985-01-03 C -0.034"
library(zoo)
DF <- read.table(text = Lines, header = TRUE)