Se si specificano n colonne come chiave di un data.table
, sono consapevole che posso unirmi a un numero inferiore di colonne rispetto a definito in quella chiave fintanto che mi unisco allo head
di key(DT)
. Ad esempio, per n = 2:Datafile data.table non testa (tasto (DT), m), utilizzando ricerca binaria non vector scan
X = data.table(A=rep(1:5, each=2), B=rep(1:2, each=5), key=c('A','B'))
X
A B
1: 1 1
2: 1 1
3: 2 1
4: 2 1
5: 3 1
6: 3 2
7: 4 2
8: 4 2
9: 5 2
10: 5 2
X[J(3)]
A B
1: 3 1
2: 3 2
Lì uniti solo alla prima colonna della chiave 2-colonna DT
. So che posso aderire a entrambe le colonne della chiave in questo modo:
X[J(3,1)]
A B
1: 3 1
Ma come faccio sottoinsieme utilizzando solo la seconda Colum colonna della chiave (ad esempio B==2
), ma ancora con ricerca binaria non eseguire la scansione di vettore? Sono consapevole del fatto che è un duplicato di:
Subsetting data.table by 2nd column only of a 2 column key, using binary search not vector scan
così mi piacerebbe generalizzare questa domanda a n
. Il mio set di dati ha circa un milione di righe e la soluzione fornita nella domanda dup collegata sopra non sembra essere ottimale.
È solo 'X [B == 2,]'. Letture consigliate: http://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.pdf –
@MatthewPlourde, sei sicuro? La vignetta di riferimento ha la seguente frase che rende la soluzione ottimale non ottimale: "Utilizziamo la chiave per sfruttare il fatto che la tabella è ordinata e utilizzare la ricerca binaria per trovare le righe corrispondenti. Non è stata eseguita la scansione vettoriale; non abbiamo usato ==. " – GSee
@GSee grazie, hai assolutamente ragione. scuse, mio errore. –