我的数据框有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
答案 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
(另请注意,您最好使用日志返回 - 它们更易于工作)