如何在 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)
这使得正在做的事情变得明确,因此对未来的你来说不那么混乱。 :)
我想在一个 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)
这使得正在做的事情变得明确,因此对未来的你来说不那么混乱。 :)