的方式,我想知道什麼是尋找在xts
對象是同一個特定行的所有行的最快的方法最快找到匹配的行
library(xts)
nRows <- 3
coreData <- data.frame(a=rnorm(nRows), b=rnorm(nRows), c=rnorm(nRows))
testXts1 <- xts(coreData, order.by=as.Date(1:nRows))
testXts2 <- xts(coreData, order.by=as.Date((nRows + 1):(2*nRows)))
testXts3 <- xts(coreData, order.by=as.Date((2*nRows + 1):(3*nRows)))
testXts <- rbind(testXts1, testXts2, testXts3)
> testXts
a b c
1970-01-02 -0.3288756 1.441799 1.321608
1970-01-03 -0.7105016 1.639239 -2.056861
1970-01-04 0.1138675 -1.782825 -1.081799
1970-01-05 -0.3288756 1.441799 1.321608
1970-01-06 -0.7105016 1.639239 -2.056861
1970-01-07 0.1138675 -1.782825 -1.081799
1970-01-08 -0.3288756 1.441799 1.321608
1970-01-09 -0.7105016 1.639239 -2.056861
1970-01-10 0.1138675 -1.782825 -1.081799
rowToSearch <- first(testXts)
> rowToSearch
a b c
1970-01-02 -0.3288756 1.441799 1.321608
indicesOfMatchingRows <- unlist(apply(testXts, 1, function(row) lapply(1:NCOL(row), function(i) row[i] == coredata(rowToSearch[, i]))))
testXts[indicesOfMatchingRows, ]
a b c
1970-01-02 -0.3288756 1.441799 1.321608
1970-01-05 -0.3288756 1.441799 1.321608
1970-01-08 -0.3288756 1.441799 1.321608
我相信這可以更優雅地完成,快速的方式。
一個更普遍的問題是,您R中是怎麼說的:「我有這樣的行矩陣[5]我怎麼能找到矩陣是相同的矩陣[5](的指標)其他行」。
如何做到這一點的data.table
?
隨着摘要,你只能做一次哈希表,所以大概如果你需要多次搜索會得到回報 – jenesaisquoi
我相信這個基準對於'roland.dt'來說太快了,因爲'testDT'正在通過**被引用**到在第一次試驗期間將其分類的'roland.dt',這將使後續試驗更快。你可以在這裏試試:'a < - data.table(x = 10:1);一個; foo < - function(x){setkey(x); X [data.table(X = 1:5)]}; B'-foo(a)的一個''或閱讀[這裏](https://stackoverflow.com/a/14293056/2573061) – C8H10N4O2
這並不是一個巨大的差異,但我不能比兩倍的基準更好的「誠實」關閉'data.table'解決方案(下面的解決方案) – C8H10N4O2