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

时间:2016-03-30 16:01:54

标签: r xts

我想在一个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)会返回NULL

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

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

这可能是最好的解决方案吗? 提前致谢

2 个答案:

答案 0 :(得分:1)

您可以尝试:

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

答案 1 :(得分:1)

我建议使用所需的列名和值创建一个新的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)

这使得所做的事情变得明确,因此对未来你来说不那么容易混淆。 :)