如何在 R 中的 xts 对象中创建多个用 0 填充的列?

How to create multiple columns filled with 0 in an xts object in R?

我想在一个 xts 对象中创建多个用零填充的列。我可以手动使用此代码:

> class(data)
[1] "xts" "zoo"
> colnames(data)
 [1] "A"  "B"
>  data$C <- 0
> colnames(data)
 [1] "A"  "B"  "C"

但不幸的是,在 for 循环中,i 被解释为对象名称而不是变量。

> symbols
[1] "D"  "E"  "F"
for (i in symbols) {
    data$i <- 0
}
> colnames(data)
> [1] "A"  "B"  "C"  "i"

当我使用 [[ 时,程序等效于 $ 然后 colnames(data) returns NULL

最后,我尝试使用如下所示的 apply 系列函数,但它没有按预期工作。

> sapply(symbols,  function(i) {data$i <- 0})
D E F 
0 0 0

执行此操作的最佳解决方案是什么? 提前致谢

你可以试试:

do.call(cbind,setNames(c(list(data),rep(list(0),length(symbols))),
                       c("",symbols)‌​))

我建议使用所需的列名称和值创建一个新的 xts 对象,然后 merge 使用原始数据。

require(xts)
data <- xts(cbind(A=1:5,B=5:1), Sys.Date()-5:1)
symbols <- LETTERS[3:6]
zeros <- xts(matrix(0,nrow(data),length(symbols)),
             index(data), dimnames=list(NULL,symbols))
data <- merge(data, zeros)

这使得正在做的事情变得明确,因此对未来的你来说不那么混乱。 :)