下面是一個使用foverlaps
從包裝data.table
,用下面的玩具數據集的一種方法:
library(data.table)
##
set.seed(123)
ts1 <- data.table(
ts(rnorm(50, sd = .1), frequency = 260))[
,V2 := V1]
##
ts2 <- cbind(
ts(rnorm(50,-0.1,.5), frequency=260)
,ts(rnorm(50,0.1,.5), frequency=260))
ts2 <- data.table(
t(apply(ts2, 1, sort)))[
1, c("V1", "V2") := NA]
setkeyv(ts2, c("V1","V2"))
由於foverlaps
從每個輸入data.table
S的需要兩列,我們只是複製了第一列ts1
(就我所知,這是慣例)。
fts <- foverlaps(
x = ts1, y = na.omit(ts2)
,type = "within")[
,list(Freq = .N)
,by = "V1,V2"]
這對加入ts2
ts1
爲ts1
值中的每個ts2
的[V1, V2]
區間落在每一個發生 - 然後聚集由間隔獲得計數。由於某些ts2
的間隔可能包含零ts1
值(這是此示例數據的情況)是可行的,因此您可以將彙總數據留在原始ts2
對象上,並得出相應的比例:
(merge(x = ts2, y = fdt, all.x=TRUE)[
is.na(Freq), Freq := 0][
,Inside := Freq/nrow(ts1)][
,Outside := 1 - Inside])[1:10,]
##
# V1 V2 Freq Inside Outside
# 1: NA NA 0 0.00 1.00
# 2: -1.2545844 -0.37373731 0 0.00 1.00
# 3: -0.9266236 -0.21024328 1 0.02 0.98
# 4: -0.8743764 -0.29245223 0 0.00 1.00
# 5: -0.7339710 0.19230687 50 1.00 0.00
# 6: -0.7103589 0.13898042 50 1.00 0.00
# 7: -0.7089414 -0.26660369 0 0.00 1.00
# 8: -0.7007681 0.58032622 50 1.00 0.00
# 9: -0.6860721 0.01936587 35 0.70 0.30
# 10: -0.6573338 -0.41395304 0 0.00 1.00
你需要做的第一件事就是呈現一個R對象。該輸出並不表明你還沒有對R做過任何事情。這不是打印操作的典型結果。製作一個對象並在R代碼中顯示所需的間隔中斷。 –
他們是我認爲的時間系列對象 – user137425
你的範圍總是對稱零?在這種情況下,與絕對值比較將是最簡單的。 – Frank