You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用xts读取R中每日股票时序数据时遇错误求助

问题:使用xts读取每日股票市场数据时遭遇多类错误

数据集背景

数据集包含5030条观测值,时间范围覆盖2000年1月4日至2019年7月22日,是SystemicR包作者提供的data_stock_returns数据集,目标是复现作者结果后替换为自有数据集。

已做排查

  • 确认数据集中无NA值
  • 尝试将日期格式从dd/mm/yyyy改为yyyy/mm/dd,未解决问题
  • 转换为季度频率后可正常读取,推测每日数据读取代码存在问题

数据集示例

DateSXXPSTJISPINGAIndex
4/01/200000-0.0209-0.02741
5/01/20000-0.02484-0.0020-0.008542
6/01/200000.0995-0.0212-0.006893
7/01/200000.0610.023030.019614
10/01/2000-0.00147-0.0456-0.01720.001195
..................
22/07/20190-0.01270.001240.00297565030

尝试的代码及错误

代码1:

df_my_data <- read.csv(('C:/Users/s/Desktop/R/intro/data/data_stock_returns.csv'), sep = ";")

str(df_my_data)
# 'data.frame':   5030 obs. of  74 variables:
#  $ Index           : int  1 2 3 4 5 6 7 8 9 10 ...
#  $ SXXP     : num  0 0 0 0 0 ...
#  $ STJ   : num  0 -0.0248 0.0995 0.0611 -0.0456 ...
#  $ ISP   : num  -0.021 -0.0021 -0.0212 0.023 -0.0173 ...

xts(df_my_data, order.by = as.Date(rownames(df_my_data$Date), "%d/%m/%Y"))

df_my_data$Date <- as.Date(df_my_data$Date)

错误信息:

Error in $<-.data.frame(*tmp*, Date, value = numeric(0)) : replacement has 0 rows, data has 5030

Error in xts(df_my_data, order.by = as.Date(rownames(df_my_data), "%d/%m/%Y")) :
'order.by' cannot contain 'NA', 'NaN', or 'Inf'

代码2:

df_my_data$Date_xts <- as.xts(df_my_data[, -1], order.by = (df_my_data$Date))

错误信息:

Error in xts(x, order.by = order.by, frequency = frequency, ...) :
order.by requires an appropriate time-based object

代码3:

library(SystemicR)
l_result<- f_CoVaR_Delta_CoVaR_i_q(data_stock_returns)

解决方案

1. 正确读取并处理本地CSV文件

从str(df_my_data)输出可见,数据框中无Date列,说明读取CSV时未正确加载该列或列名解析错误。需确保读取时包含Date列,再正确转换日期格式:

# 读取CSV,确认Date列被加载
df_my_data <- read.csv("C:/Users/s/Desktop/R/intro/data/data_stock_returns.csv", sep = ";")

# 转换日期格式(原格式为dd/mm/yyyy)
df_my_data$Date <- as.Date(df_my_data$Date, format = "%d/%m/%Y")

# 创建xts对象:用数值列作为数据,Date作为时间索引
xts_data <- xts(df_my_data[, -which(names(df_my_data) %in% c("Date", "Index"))], 
                order.by = df_my_data$Date)

2. 直接使用SystemicR内置数据集

若目标是复现作者结果,无需手动读取CSV,直接加载包内数据集即可:

library(SystemicR)
# 加载内置数据集
data("data_stock_returns")

# 确认Date列格式并转换
data_stock_returns$Date <- as.Date(data_stock_returns$Date, format = "%d/%m/%Y")

# 转为xts对象(若需要)
xts_data <- xts(data_stock_returns[, -c("Date", "Index")], order.by = data_stock_returns$Date)

# 运行作者提供的函数
l_result <- f_CoVaR_Delta_CoVaR_i_q(data_stock_returns)

错误原因解析

  • 第一个错误:df_my_data$Date不存在,直接赋值会生成长度为0的向量,无法匹配5030行数据
  • 第二个错误:rownames(df_my_data$Date)是错误用法,rownames()作用于数据框而非列,且原数据框行名不是日期字符串,转换后全为NA,导致xts的order.by参数不合法
  • 第三个错误:df_my_data$Date未被正确转换为时间对象(甚至不存在),不符合xts对order.by的类型要求

内容的提问来源于stack exchange,提问作者user17940819

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 14:15:40