我正在帮助一个朋友做一些 R 功课,以完成一个显然教得很差的 R 课程(因为课程中涵盖的所有内容和补充材料都无济于事)。
我们有两个数据集。一个包含公司份额的每日离散回报百分比,另一个包含两种货币的每日汇率,比如美元兑瑞士法郎。它看起来像这样:
Date Mon Day Exchangerate
2000 01 01 1.03405
2000 01 02 1.02987
2000 01 03 1.03021
2000 01 04 1.03456
2000 01 05 1.03200
以及每日离散回报:
Date Share1
20000104 -0.03778
20000105 0.02154
20000106 0.01345
20000107 -0.01234
20000108 -0.01789
任务是编写一个函数,该函数使用两个矩阵并从瑞士投资者的角度计算每日回报。我们假设初始投资为 1000 美元。
我尝试使用 tidyverse 并使用 dplyr 的 lag 函数计算总回报的变化和一天到另一天的百分比变化,如下面提供的代码所示。
library(tidyverse)
myCHFreturn <- function(matrix1, matrix2) {
total = dplyr::right_join(matrix1, matrix2, by = "date") %>%
dplyr::filter(!is.na(Share1)) %>%
dplyr::select(-c(Date, Mon, Day)) %>%
dplyr::mutate(rentShare1_usd = (1+Share1)*1000,
rentShare1_usd = dplyr::lag(rentShare1_usd) * (1+Share1),
rentShare1_chf = rentShare1_usd*Exchangerate,
rentShare1_chfperc =(rentShare1_chf - dplyr::lag(rentShare1_chf))/dplyr::lag(rentShare1_chf),
rentShare1_chfperc = rentShare1_chfperc*100)
}
问题是rentShare1_usd = dplyr::lag(rentShare1_usd) * (1+Share1)
函数的一部分依赖于为初始 1000 美元投资计算的值。因此,我的看法是,我们需要基于初始投资对变化进行某种类型的滚动计算。但是,我不知道如何在函数中实现这一点,因为我只使用滚动方式。我们想根据变量 Share1 中给出的变化和前一天的投资价值来计算每日收益。很感谢任何形式的帮助。