【发布时间】:2020-07-12 16:03:42
【问题描述】:
我开始复制 Fama 和 French 在 r 中使用的价值因素,为我的期末论文制定投资组合策略。
我有一个多年来标准普尔 500 指数的月度市值数据集。我创建了一个循环来确定在某个日期确定的观测值的变量(mkt cap)是否高于或低于同时横截面计算的某个阈值(跨越时间 t 变量 mkt cap 的所有观测值) )。 为了实现这一点,我认为适当的技术是 for 循环。这样,对于每个日期,我都会计算阈值并检查标准。不幸的是,我无法在循环期间存储逻辑。当我打印结果时,我可以看到我想要存储的内容,但是当我尝试存储时,我只得到与循环最后一步相关的结果。
for(d in dates$date){
month <- data_tbk %>% filter(date==d)
up <- quantile(month$mktcap, 0.8, na.rm=TRUE)
low <- quantile(month$mktcap, 0.2, na.rm=TRUE)
data_tbk %>% filter(date==d) %>%
mutate(ptf=ifelse(mktcap>=up,1,ifelse(mktcap<=low,0,NA))) %>%
print
}
我试图追求的另一种方式是以下,但我得到的更少:
data_tbk$ptf <- NA
for(d in dates$date){
month <- data_tbk %>% filter(date==d)
up <- quantile(month$mktcap, 0.8, na.rm=TRUE)
low <- quantile(month$mktcap, 0.2, na.rm=TRUE)
data_tbk %>% filter(date==d) %>% filter(mktcap>=up) %>% ptf=1
filter(data_tbk, date==d) %>% filter(mktcap<=low) %>% ptf=0
}
我应该如何更改代码以根据条件获得包含逻辑 1 或 0 的列?
【问题讨论】:
标签: r r for-loop dplyr tidyverse finance