r-从长格式数据帧计算股票回报



获取一个长格式的股价数据框架(包含多只股票(并生成一个新的数据框架,其中包含每只股票的汇总回报统计数据,最佳做法是什么?我正在考虑一些dplyr、group_by和summary的解决方案。我的输入数据框架有列:日期、报价和价格。我希望输出为Ticker有一列,然后为每个返回统计数据有多列。我希望退货统计数据可以自定义,这样我就可以有"1个月退货"、"今年迄今",甚至"2019年3月3日至2020年2月14日之间的退货"之类的信息。

下面是我的输入的一个示例:

library(lubridate)
set.seed(100)
d_start <- as.Date("2019-01-01")
input <- data.frame(
Date = rep(seq(d_start, today(), by = "1 day"), 3),
Ticker = c(rep("AAPL", today() - d_start + 1), 
rep("MSFT", today() - d_start + 1),
rep("NFLX", today() - d_start + 1)),
Price = c(runif(today() - d_start + 1, min = 20, max = 40),
runif(today() - d_start + 1, min = 50, max = 90),
runif(today() - d_start + 1, min = 150, max = 400))
)

以下是我所期望的输出。与:r1作为过去1个月的回报,r2为今年迄今为止的回报,以及r3作为2019年3月3日至2020年2月14日的回报

Ticker         r1         r2          r3
1   AAPL  0.1788484  0.1370241  0.24244384
2   MSFT -0.1466788 -0.2850910 -0.06895183
3   NFLX -0.4755626 -0.4964146 -0.06005490

您正在专门寻找tidyquant包。更具体地说,tq_mutate((。

示例代码如下:

Stocks <- c("AAPL","MSFT","NFLX") %>%
tq_get() %>%
group_by(symbol)%>%
tq_mutate(
select = 'adjusted',
mutate_fun = periodReturn,
period = 'monthly',
col_rename = 'return')

字符串矢量应包含yahoo金融符号。当导入多个符号时,tq_get((默认返回一个长df,并具有额外的参数"from"one_answers"to"来选择感兴趣的日期。如果您已经有了自己的信息,那么tq_mutate((的工作原理与通常的dplyr函数类似。

毫无疑问,这个程序包确实有很好的文档记录。

最新更新