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

  • 本文关键字:填充 创建 中的 对象 xts 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

最好的解决方案是什么?提前感谢

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

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

您可以尝试:

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

最新更新