2013-05-26 92 views
1

在data.table行。如果我有以下幾點:選擇僅使用第二個關鍵

a<-data.table(id=rep(letters[1:4],2), var=c(1,2,1:6), key="id,var") 

我可以複製「通常」 a[a$id=="a" & a$var==1,]

> a[.("a",1)] 
    id var 
1: a 1 

但怎麼樣a[a$var==1,]?如果我改變"a"與整個id專欄中,我沒有得到我所期望的:

> a[.(id,1)] 
    id var 
1: a 1 
2: a 1 
3: b 1 
4: b 1 
5: c 1 
6: c 1 
7: d 1 
8: d 1 

在此先感謝。

+1

任何錯誤使用'一[VAR == 1]'? – flodel

+0

@ flodel它是SLOW的... – nigmastar

+0

[子集data.table由第2列僅2列鍵,使用二進制搜索而不是矢量掃描](http://stackoverflow.com/questions/15597685/subsetting-data -table逐第二列只對的一使用-2-列密鑰-二進制搜索)。備用可能重複:http://stackoverflow.com/questions/15769837/subsetting-data-table-by-not-headkeydt-m-using-binary-search-not-vector-sca – GSee

回答

3

試試這個:

> a[ .(unique(id), 1),, nomatch = 0 ] 
    id var 
1: a 1 
2: c 1 

ADDED。我們可以避免通過使其成爲一個因素,並使用水平掃描id

> a<-data.table(id=factor(rep(letters[1:4],2)), var=c(1,2,1:6), key="id,var") 
> a[ .(levels(id), 1),, nomatch = 0 ] 
    id var 
1: a 1 
2: c 1 
+0

它的工作原理,謝謝。我想沒有更緊湊的方法來做到這一點,對吧? – nigmastar

+1

它沒有更緊湊,但我增加了一個潛在更有效的替代 –

+0

我看,是的,我可能會快得多。再次感謝 – nigmastar

相關問題