我想计算大量公司的财政年度回报和每日回报的标准差。我对R来说相对较新,之前曾使用SAS来计算回报等。但是,我想在短期/中期切换到R.
我有两个文件:1)包含公司标识符,日期,每日报表(df.1)和2)我的样本(df.2),我希望汇总回报
firm date ret
1 01/01/1992 0.024
1 02/01/1992 0.010
. . .
. . .
1 31/12/2014 0.002
2 01/01/1992 0.004
2 02/01/1992 0.012
该文件非常大,约为1M行。
第二个文件看起来像这样:
firm fiscal_year_start fiscal_year_end
1 01/01/1992 31/12/1992
1 01/01/1993 31/12/1993
1 01/01/1994 31/12/1994
我想计算会计年度回报和年化标准差。两个.csv文件都作为数据帧加载到R中。我不确定如何最好地处理日期变量以及如何构造for循环以遍历每日返回文件。
非常感谢任何帮助。
EDIT1
我能够使用此函数对大数据框进行子集化:
myfunc <- function(x,y,z){df.1(df.1$date1 >= x & df.1$date1 < y & df.1$firm == firm1,]}
firm1 <- df.2$firm[1]
start_date <- df.2$StartDate[1]
end_date <- df.2$EndDate[1]
Test <- myfunc(start_date,end_date, firm1)
对于这个子集,我可以得到财政年度回报和std:
# return
fiscal_year_ret <- with(Test, sum(Test$ret))
# annualized variance
var <- with(Test, var(Test$ret))
annualized_var <- var*length(Test)
annualized_st.dev <- sqrt(annualized_var)
我的一大问题是将其嵌入循环中,这样我就可以在df.2中遍历不同的公司标识符和日期。
EDIT2
所以我有类似的东西
df.output <- data.frame(returns=as.numeric(),
std.deviation=as.numeric(),
stringsAsFactors=FALSE)
我想用结果填充上面的数据框。
for (i in sample) {
myfunc <- function(x,y,z){df.1[df.1$date1 >= x & df.1$date1 < y & df.1$firm == firm1,]}
firm1 <- df.2$firm[i]
start_date <- df.2$StartDate[i]
end_date <- df.2$EndDate[i]
subset <- myfunc(start_date,end_date, firm1)
# return
fiscal_year_ret <- with(subset, sum(subset$ret))
df.output$returns <-fiscal_year_ret
# variance
var <- with(subset, var(subset$ret))
annualized_var <- var*length(subset)
annualized_st.dev <- sqrt(annualized_var)
}
这样的事情。
答案 0 :(得分:0)
这是一种方式:
library(lubridate)
data %>%
mutate(year =
date %>%
mdy %>%
floor_date(unit = "year") )
group_by(year) %>%
summarize(
mean_return = mean(ret),
sd_return = sd(ret))