В R с использованием data.table как одно подмножество или запрос, когда поле критерия является целым числом? - PullRequest
4 голосов
/ 19 января 2012

Я использую пакет data.table совсем немного.Есть много примеров поднабора или запросов или поиска (или как вы хотите это называть) с помощью бинарного поиска, который, очевидно, намного быстрее, чем векторное сканирование.Вот выдержка из файла справки.

DT["a"]                    # binary search (fast)
DT[x=="a"]                 # vector scan (slow)

Но что произойдет, если столбцы, по которым нужно искать, не являются фактором (или символом), а целым числом.

cpt <- c(23456,23456,10000,44555,44555)
description <- c("tonsillectomy","tonsillectomy in >12 year old","brain transplant","castration","orchidectomy")
cpt.desc <- data.table(cpt,description)

setkey(cpt.desc,cpt)
cpt.desc[10000,]  

Это не работает, потому что целое число 10000 интерпретируется как 10000-ая строка, которой в этом data.table не существует.

Если мы изменим синтаксис, то получим то, что ищем.

cpt.desc[cpt==10000,]

Однако это выглядит так, как будто это метод медленного векторного сканирования.Есть ли функция двоичного поиска для целых чисел в пакете data.table?Благодарю вас в ожидании вашей помощи.

1 Ответ

4 голосов
/ 19 января 2012

Попробуйте cpt.desc[J(10000)].Добавьте ,"mult=all", чтобы получить все совпадения.

...