xts
オブジェクトx
を迅速かつ効率的に分割してマージするには、x
で参照されるものよりも大きなリストを使用しますか?すべての要因(不足している要素を含む)を使用して分割されたxtsのリストをマージする
この単純な例では、因子の完全なリスト(ゼロで埋められています)は生成されません。
a = cbind(value = runif(2), group = c(1,3))
x = xts(a, Sys.Date() + 1:nrow(a))
do.call(merge, c(split(x$value, x$group), fill = 0))
value.1 value.3
2016-12-08 0.3403723 0.0000000
2016-12-09 0.0000000 0.5247683
私の問題を回避するには、別の回避策は、操作の間に不足しているグループのリストを追加することである
all.groups = 1:5
x.all.groups = xts(cbind(value = 0, f = all.groups), Sys.Date()-1:length(all.groups))
x = rbind(x,x.all.groups)
as.xts(do.call(merge, c(split(x$value, x$group), fill = 0)))[!(index(x) %in% index(x.all.groups)),]
value.1 value.2 value.3 value.4 value.5
2016-12-08 0.3455855 0 0.00000 0 0
2016-12-09 0.0000000 0 0.16545 0 0
のようにダミーの値を削除し、その後、その後、分割され、マージ、すべてのグループに関連付けられたダミーの値を追加することですsplit
およびmerge
。
しかし、これらのソリューションは不必要に大きくなるようです。助言がありますか? split
(または他の機能)とそのパラメータを利用するより良い方法はありますか?