如何在R中用tidyquant筛选每年3月31日的股价数据?
筛选每年3月31日的股价数据
方法1:手动指定目标日期筛选
如果已经明确要筛选的日期列表,可直接将日期转换为R的Date类型,再通过dplyr::filter()匹配:
library(tidyverse) library(tidyquant) # 假设股价数据存储在stock_data中,日期列名为date(tidyquant下载数据的默认列名) target_dates <- as.Date(c( "2013-03-31", "2014-03-31", "2015-03-31", "2016-03-31", "2017-03-31", "2018-03-31", "2019-03-31", "2020-03-31", "2021-03-31", "2022-03-31" )) # 执行筛选 filtered_data <- stock_data %>% filter(date %in% target_dates)
方法2:动态生成目标日期(更灵活)
若需要扩展年份,手动输入日期效率低,可使用seq.Date()动态生成2013-2022年的3月31日:
# 动态生成每年3月31日的日期序列 target_dates <- seq.Date( from = as.Date("2013-03-31"), to = as.Date("2022-03-31"), by = "year" ) # 筛选数据 filtered_data <- stock_data %>% filter(date %in% target_dates)
处理节假日/周末无数据的情况
如果3月31日恰逢周末或股市休市,数据中不会有当天记录,可筛选3月31日及之前最近的交易日:
library(lubridate) # 生成原始目标日期 target_dates <- seq.Date(as.Date("2013-03-31"), as.Date("2022-03-31"), by = "year") # 调整每个日期为最近的前一个交易日 adjusted_dates <- map_dbl(target_dates, function(x) { max(stock_data$date[stock_data$date <= x]) }) %>% as.Date(origin = "1970-01-01") # 筛选调整后的日期数据 filtered_data <- stock_data %>% filter(date %in% adjusted_dates)
内容的提问来源于stack exchange,提问作者Eva
相关产品推荐
相关产品推荐

