Я интересно, что это самый быстрый способ найти все строки в 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); х [data.table (х = 1: 5)]}; б <-foo (а); a' или читайте [здесь] (https://stackoverflow.com/a/14293056/2573061) – C8H10N4O2
Это не огромная разница, но я не могу стать лучше, чем в два раза быстрее, чем на более честном, off 'data.table' (решение ниже) – C8H10N4O2