2016-03-30 2 views
2

私は1つのXTSオブジェクト内のゼロで満たされた複数の列を作成したいと思います。Rのxtsオブジェクトに0を埋め込んだ複数の列を作成するには?

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

しかし残念ながらiではなく、変数のオブジェクト名として解釈されforループ内:手動で私はこのコードを使用することができます。

> 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 

これを行うには最適な解決方法はありますか?事前

+0

こんにちは、私が試してみると、 'エラー(長さ(c、年、月、日、時、分、秒)== 6 && c(年、: 欠落値TRUE/FALSE needed' – Florent

+0

残念ながら、私は(私は記号で)のための[i]は ' – Florent

+1

トライ' 'と同じエラーを持っているデータ<-do.call(CBIND、setNames(リスト(データ、0)、C( ""、 I))) 'いっそ、ループなし:' do.call(CBIND、setNames(C(リスト(データ)、担当者(リスト(0)、長さ(シンボル)))、C( ""、記号) )) ' – nicola

答えて

1

で おかげであなたが試すことができます:

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

私はmerge元のデータとのこと、その後、新しいXTSは、目的の列の名前と値を持つオブジェクト作成することをお勧めします。

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) 

これは、実行されていることを明示的にし、将来的にはあまり混乱させないようにします。 :)

関連する問題