R中缺失数据的每日股票价格观察的简单收益和月报表

时间:2016-03-10 12:46:00

标签: r quantmod

我的数据框有4000多列和3000行。列是公司,行有每日股票收盘价。数据具有缺失值但由于数据的性质而无法删除。 现在,我想从这些每日股票收盘价观察计算简单回报和月度回报。我每天观察15年。 因为,简单回报=(今天' s价格/昨天' s价格)-1 每月回报=(上个工作日的价格/上个月的最后一个工作日的价格)-1

我说明了我的数据框架,这是15年数据中的前两个月

Date         A       B      C   D
30/12/1999  79.5    325     NA  961
04/01/2000  79.5    325     NA  961
05/01/2000  79.5    322.5   NA  945
06/01/2000  79.5    327.5   NA  952
07/01/2000  79.5    327.5   NA  941
10/01/2000  79.5    327.5   NA  946
11/01/2000  79.5    327.5   NA  888
12/01/2000  79.5    331.5   NA  870
13/01/2000  79.5    334     NA  853
14/01/2000  79.5    334     NA  834
17/01/2000  94.5    350     NA  799
18/01/2000  95.5    351.5   NA  770
19/01/2000  94.5    352.5   NA  763
20/01/2000  97.5    352.5   NA  730
21/01/2000  97.5    352.5   NA  765
24/01/2000  97.5    352.5   NA  743
25/01/2000  97.5    352.5   NA  737
26/01/2000  97.5    352.5   NA  777
27/01/2000  97.5    351.5   NA  800
28/01/2000  96.5    350     NA  770
31/01/2000  96.5    350     NA  747
01/02/2000  101.5   350     NA  719
02/02/2000  118.5   350     NA  723
03/02/2000  117     350     NA  732
04/02/2000  117     350     NA  673
07/02/2000  117     317.5   NA  671
08/02/2000  117     313.5   NA  665
09/02/2000  117     312.5   NA  655
10/02/2000  114.5   318.5   NA  684
11/02/2000  114.5   326.5   NA  655
14/02/2000  111     337.5   NA  634
15/02/2000  111     337     NA  647
16/02/2000  111     337     NA  666
17/02/2000  111     334.5   NA  713
18/02/2000  111     334.5   NA  726
21/02/2000  112     332.5   NA  714
22/02/2000  111     331.5   NA  653
23/02/2000  119     332.5   NA  658
24/02/2000  125     332.5   NA  646
25/02/2000  125     350.5   NA  633
28/02/2000  125     350.5   NA  645
29/02/2000  125     350.5   NA  711

期望的简单回报,为了节省空间我刚刚提出了一些期望的

Date        A    B      C    D
30/12/1999              
04/01/2000  0    0      NA   0
05/01/2000  0   -0.01   NA  -0.02
06/01/2000  0    0.02   NA   0.01
07/01/2000  0    0.00   NA  -0.01
10/01/2000  0    0.00   NA   0.01
11/01/2000  0    0.00   NA  -0.06
12/01/2000  0    0.01   NA  -0.02
13/01/2000  0    0.01   NA  -0.02
14/01/2000  0    0.00   NA  -0.02
17/01/2000  0.19 0.05   NA  -0.04
18/01/2000  0.01 0.00   NA  -0.04
19/01/2000 -0.01 0.00   NA  -0.01
20/01/2000  0.03    0   NA  -0.04

每月数据的期望输出

Month     A      B      C    D
Jan-00  0.21    0.076   NA  -0.22
Feb-00  0.29    0.001   NA  -0.04

1 个答案:

答案 0 :(得分:-1)

将您的数据转换为zoo对象,例如

library(zoo)
prices <- data.frame(dates = c("2016-01-01", "2016-01-03", "2016-01-04"),
                     companyA = c(100,110,99),
                     companyB = c(90,81,89.1))
prices.z <- zoo(prices[,-1], order.by = as.Date(prices[,1]))
head(prices.z)
simple.returns <- diff(prices.z) / lag(prices.z, -1)
simple.returns

产生

> head(prices.z)
           companyA companyB
2016-01-01      100     90.0
2016-01-03      110     81.0
2016-01-04       99     89.1
> 
> simple.returns <- diff(prices.z) / lag(prices.z, -1)
> 
> simple.returns
           companyA companyB
2016-01-03      0.1     -0.1
2016-01-04     -0.1      0.1

(另请注意,您最好使用日志返回 - 它们更易于工作)