Matthew,<br><br>I experimented with them and the one that worked best <br>for me was this:<div class="im"><br><br>setkey(DT,A,B)<br>
start = DT[J(&quot;A&quot;,2),which=TRUE,mult=&quot;<div>first&quot;]<br>
end = DT[&quot;A&quot;,which=TRUE,mult=&quot;last&quot;]<br>
DT[start:end, ...]</div><br></div>Thanks for the suggestions!<br><font color="#888888"><br>Steve</font><br><br><div class="gmail_quote">On Tue, Jul 26, 2011 at 1:35 PM, Matthew Dowle <span dir="ltr">&lt;<a href="mailto:mdowle@mdowle.plus.com">mdowle@mdowle.plus.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hi,<br>
<br>
Good question. The vector scan B&gt;=2 should be quite quick provided it<br>
follows the DT[&quot;a&quot;]. It will be a vector scan, yes, but only over a<br>
small subset of DT$B, and that subset will be contiguous in memory. What<br>
might be biting instead is that the chained query DT[&quot;a&quot;][B&gt;=2] will<br>
subset all the columns of DT in the first []. That inefficiency could be<br>
dominating depending on how many columns DT has vs how many you really<br>
need to use. If that&#39;s the case you can speed it up a lot like this :<br>
    DT[&quot;a&quot;,list(columns I know I need)][B&gt;=2, expression using those<br>
columns]<br>
<br>
Or, on a different tack, to go as fast as possible (as requested),<br>
perhaps (untested) :<br>
<br>
setkey(DT,A,B)<br>
start = DT[J(&quot;A&quot;,2),which=TRUE,mult=&quot;first&quot;]<br>
end = DT[&quot;A&quot;,which=TRUE,mult=&quot;last&quot;]<br>
DT[start:end, ...]<br>
<br>
Or, getting fancy now in one less step (again, untested) :<br>
<br>
w = DT[J(&quot;A&quot;,c(2,Inf)),which=TRUE,roll=TRUE]<br>
DT[w[1]:w[2],...]<br>
<br>
but that only works if you know 2 exists in B, and that there are no<br>
duplicates of 2. Possibly check DT$B[w[1]]&gt;=2 and +1 to w[1] if not.<br>
<br>
Much neater would be the FR to do range (i.e. between) queries :<br>
<br>
<a href="https://r-forge.r-project.org/tracker/index.php?func=detail&amp;aid=203&amp;group_id=240&amp;atid=978" target="_blank">https://r-forge.r-project.org/tracker/index.php?func=detail&amp;aid=203&amp;group_id=240&amp;atid=978</a><br>

<br>
So, if list() columns were easily created as per previous threads,<br>
it might be simply :<br>
<br>
setkey(DT,A,B)<br>
DT[J(&quot;a&quot;,V(low,upp)),...]<br>
<br>
where V() stands for vector, and would create a list() join column. Open and closed<br>
ends can be done via +/-1 to low and upp. One sided via setting low to -Inf or<br>
upp to +Inf.  That idiom might allow some funky queries such as a different range for<br>
each row of i, efficiently both in terms of amount of code, and execution speed.<br>
<font color="#888888"><br>
Matthew<br>
</font><div><div></div><div class="h5"><br>
<br>
On Mon, 2011-07-25 at 20:46 -0700, Steve Harman wrote:<br>
&gt; Hello All,<br>
&gt;<br>
&gt; I have a data table, DT, and two columns, A and B. A has character<br>
&gt; values and B has numeric values.<br>
&gt; I need to find the rows matching &quot;a&quot; AND greater than or equal to 2.<br>
&gt; After setkey(DT,A), I am using DT[&quot;a&quot;][B&gt;=2].<br>
&gt;<br>
&gt; However, since this command needs to be repeated many times for many<br>
&gt; different values,<br>
&gt; I would like it to be as fast as possible.<br>
&gt;<br>
&gt; If I had to test for equality for both variables, then I would use<br>
&gt; setkey(DT,A,B) followed by DT[J(&quot;A&quot;,2)]. However, the second condition<br>
&gt; is greater than or equal to, which, results in slower execution<br>
&gt; compared to matching for equality for both variables.<br>
&gt;<br>
&gt; I wanted to direct this question to the list to take advantage of any<br>
&gt; speed improvement that can be possible and I might be missing. Thank<br>
&gt; you very much in advance.<br>
&gt;<br>
&gt; Steve<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; datatable-help mailing list<br>
&gt; <a href="mailto:datatable-help@lists.r-forge.r-project.org">datatable-help@lists.r-forge.r-project.org</a><br>
&gt; <a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help</a><br>
<br>
<br>
<br>
</div></div></blockquote></div><br>