任務是將多個物件動態合并xts為一個帶有后綴的大 blob,其中后綴本質上是 xts 物件的列名。
樣本資料:
library(xts)
a <- data.frame(alpha=1:10, beta=2:11)
xts1 <- xts(x=a, order.by=Sys.Date() - 1:10)
b <- data.frame(alpha=3:12, beta=4:13)
xts2 <- xts(x=b, order.by=Sys.Date() - 1:10)
c <- data.frame(alpha=5:14, beta=6:15)
xts3 <- xts(x=c, order.by=Sys.Date() - 1:10)
靜態合并方式:
$> merge.zoo(xts1, xts2, xts3, suffixes=c("A", "B", "C"))
# output
alpha.A beta.A alpha.B beta.B alpha.C beta.C
2022-03-11 10 11 12 13 14 15
2022-03-12 9 10 11 12 13 14
2022-03-13 8 9 10 11 12 13
2022-03-14 7 8 9 10 11 12
2022-03-15 6 7 8 9 10 11
2022-03-16 5 6 7 8 9 10
2022-03-17 4 5 6 7 8 9
2022-03-18 3 4 5 6 7 8
2022-03-19 2 3 4 5 6 7
2022-03-20 1 2 3 4 5 6
我可能有超過 3 個 xts 物件,而 3 個只是一個任意演示。
我已經嘗試過do.call,但我的do.call嘗試在有/沒有后綴時失敗了,因為我無法將 3 個 xts 物件包裝成一個被 do.call 作為串列接受的資料結構(在 R 的語言中,它應該是 3 個專案的向量)。
do.call演示:
# do.call with xts objects as separate args and suffixes, works
do.call(merge.zoo, list(xts1, xts2, xts3, suffixes=c("A", "B", "C")))
# do.call with xts objects wrapped up as list and suffixes, failed
# because R takes each element of list as vector and essentially a list of xts objects is a list of 3 lists, each of which has a xts object.
xts.list <- list(xts1, xts2, xts3)
# check data type
class(xts.list[[1]]) # output: xts,zoo
class(xts.list[1]) # output: list
# do.call failed attempt
do.call(merge.zoo, list(xts.list, suffixes=c("A", "B", "C")))
# Error Message
Error in zoo(structure(x, dim = dim(x)), index(x), ...) :
“x” : attempt to define invalid zoo object
換句話說,如果我可以將串列解壓縮成動態數量的引數,我就能讓這個想法發揮作用;但是我似乎找不到在 R 或其他解決方案中解壓縮引數的方法。
免責宣告:我試圖解決的最終問題是最終能夠在多面板視圖中繪制時間序列資料;ggplot不適用于我每天使用的大多數軟體包。
免責宣告 2:merge.xts忽略后綴(一個錯誤),merge.zoo是可行的選擇。有關更多資訊,請查看此處
uj5u.com熱心網友回復:
list我們可以在ie中傳遞所有內容
library(zoo)
c(xts.list, list(suffixes=c("A", "B", "C")))
現在,使用mergeindo.call
do.call(merge.zoo, c(xts.list, list(suffixes=c("A", "B", "C"))))
-輸出
alpha.A beta.A alpha.B beta.B alpha.C beta.C
2022-03-11 10 11 12 13 14 15
2022-03-12 9 10 11 12 13 14
2022-03-13 8 9 10 11 12 13
2022-03-14 7 8 9 10 11 12
2022-03-15 6 7 8 9 10 11
2022-03-16 5 6 7 8 9 10
2022-03-17 4 5 6 7 8 9
2022-03-18 3 4 5 6 7 8
2022-03-19 2 3 4 5 6 7
2022-03-20 1 2 3 4 5 6
請注意,第一個引數merge是可變引陣列件 ( ...- 它可以采用一個或多個 xts 資料,其中所有其他組件都被命名,這就是我們只為這些組件創建listwith的原因names,即后綴。根據?merge
合并(...,所有 = TRUE,填充 = NA,后綴 = NULL,連接 =“外部”,retside = TRUE,retclass =“xts”,tzone = NULL,drop=NULL,check.names=NULL)
因此,當我們想將listie附加到xts.list另一個串列元素時,將第二個命名向量包裝在 a 中list,然后僅c進行 oncatenate。它類似于
> c(list(1), list(a = 1, b = 2))
[[1]]
[1] 1
$a
[1] 1
$b
[1] 2
而不是以下內容,因為這會創建一個嵌套list
> list(list(1), list(a = 1, b = 2))
[[1]]
[[1]][[1]]
[1] 1
[[2]]
[[2]]$a
[1] 1
[[2]]$b
[1] 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/446296.html
