在xts对象指定日期的特定列替换值时遇警告,求解决方法
解决xts对象中特定日期列赋值的警告问题
我来帮你搞定这个xts赋值的问题!你遇到的警告是因为链式索引(test[date]$col <- value)在xts对象中进行赋值时会触发维度不匹配的问题,而且这种写法本质上是对临时生成的子集对象赋值,并不会真正修改原有的test对象。
问题原因拆解
你最后一行代码test["1996-08-02"]$CASH <- 1的执行逻辑是:
- 先创建一个仅包含
1996-08-02这一行的临时xts子集 - 从这个子集里提取
CASH列 - 尝试给这个临时列赋值1
但xts在处理这种操作时,会因为临时对象的维度匹配问题抛出警告,更关键的是,这个赋值不会作用到你原本的test对象上!
正确的赋值方法
有两种简单直接的写法可以解决这个问题:
方法1:明确指定行和列的索引(推荐)
直接通过xts[行索引, 列索引]的方式定位到要修改的元素,这是xts官方推荐的赋值方式:
dates <- as.Date(c("1996-08-02","1996-08-05", "1996-08-06")) test <- xts(rep(1,3), order.by = dates) names(test) <- "Stock1" test$CASH <- NA # 添加现金头寸 test["1996-08-02", "CASH"] <- 1 # 正确赋值
方法2:先提取列再指定行索引
先提取CASH列的xts对象,再给对应日期的元素赋值:
test$CASH["1996-08-02"] <- 1
验证结果
运行上述正确代码后,你可以用print(test)查看结果,会发现1996-08-02的CASH值已经被正确设置为1,而且不会有任何警告:
> print(test) Stock1 CASH 1996-08-02 1 1 1996-08-05 1 NA 1996-08-06 1 NA
内容的提问来源于stack exchange,提问作者DanielMc
相关产品推荐
相关产品推荐

