我的数据集如下所示:每个交易日从1991年到2016年,每日收盘价格为25年。
Company Code Company Name Daily Trading Dates Daily Closing Share price
43677 CENTURY ENKA LTD. 1/1/1991 3550.00
-do- -do- 1/2/1991 3600.00
. 3700.00
. 3800.00
12/31/1991 x
. x
. x
1/1/2016 x
. x
. x
12/31/2016 x
答案 0 :(得分:1)
我认为SMA
包中的TTR
函数可能有所帮助。这是一个例子:
library(TTR)
p1 <- c(45,68,98,97,45,12,46,98,45,65,97,48,65,95) #dummy price data
SMA(p1,4) #calculate a 4 period simple moving average
#here is outcome
[1] NA NA NA 77.00 77.00 63.00 50.00 50.25 50.25 63.50 76.25
[12] 63.75 68.75 76.25
因此,在SMA功能中,如果您将第二个参数设置为252 - 一年中的交易天数 - 我认为您将获得数据框中每个日期过去一年的年平均股价。
答案 1 :(得分:1)
我会使用包lubridate
以及tapply
或ave
。在下文中,我假设您的数据采用名为data.frame
的{{1}}形式。
dat
两者之间的区别在于library(lubridate)
yr <- year(mdy(date))
res1 <- tapply(dat$price, yr, FUN = mean)
res2 <- ave(dat$price, yr, FUN = mean)
返回一个向量为输入向量长度的向量,而ave
返回一个向量,该向量具有与由分组变量定义的组一样多的元素,这种情况tapply
。