<div dir="ltr"><div>Try</div><div><br></div><div><br></div><div>DT[c(T, tail(a, -1) != head(a,-1))]<br></div><div><br></div><div><div>##    a b</div><div>## 1: 1 8</div><div>## 2: 2 7</div><div>## 3: 3 5</div></div></div><div class="gmail_extra">

<br><br><div class="gmail_quote">On Wed, Apr 30, 2014 at 4:59 PM, Michael Smith <span dir="ltr"><<a href="mailto:my.r.help@gmail.com" target="_blank">my.r.help@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

... and here's a new challenge. What if `a` is character?<br>
<br>
DT <- data.table(a = as.character(c(1, 2, 2, 3)), b = 8:5)<br>
<div class="">DT[, L.a := c(NA, head(a, -1))][a != L.a | <a href="http://is.na" target="_blank">is.na</a>(L.a)][, L.a := NULL][]<br>
<br>
</div>I still would like to compare equality with the previous<br>
observation/row, and remove it if it's the same. (`diff` doesn't work<br>
with characters.)<br>
<span class="HOEnZb"><font color="#888888"><br>
M<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
<br>
On 04/30/2014 04:55 PM, Michael Smith wrote:<br>
> Chinmay,<br>
><br>
> Kudos, that's a nice one! It also can be generalized to longer lags.<br>
> Thanks!<br>
><br>
> M<br>
><br>
> On 04/30/2014 03:59 PM, Chinmay Patil wrote:<br>
>> You can try<br>
>><br>
>> DT<br>
>> ##    a b<br>
>> ## 1: 1 8<br>
>> ## 2: 2 7<br>
>> ## 3: 2 6<br>
>> ## 4: 3 5<br>
>><br>
>> DT[c(T,diff(a)!=0),]<br>
>> ##    a b<br>
>> ## 1: 1 8<br>
>> ## 2: 2 7<br>
>> ## 3: 3 5<br>
>><br>
>><br>
>><br>
>><br>
>> On Tue, Apr 29, 2014 at 10:04 PM, Michael Smith <<a href="mailto:my.r.help@gmail.com">my.r.help@gmail.com</a><br>
>> <mailto:<a href="mailto:my.r.help@gmail.com">my.r.help@gmail.com</a>>> wrote:<br>
>><br>
>>     All,<br>
>><br>
>>     Is there some data.table-idiomatic way to filter based on a previous<br>
>>     observation/row? For example, I want to remove a row if<br>
>>     DT$a[row]==DT$a[row-1].<br>
>><br>
>>     It could be done by first calculating the lag and then filtering based<br>
>>     on that, but I wonder if there's a more direct way.<br>
>><br>
>>     The following example works, but my feeling is there should be a more<br>
>>     elegant solution:<br>
>><br>
>>     ( DT <- data.table(a = c(1, 2, 2, 3), b = 8:5) )<br>
>>     DT[, L.a := c(NA, head(a, -1))][a != L.a | <a href="http://is.na" target="_blank">is.na</a><br>
>>     <<a href="http://is.na" target="_blank">http://is.na</a>>(L.a)][, L.a := NULL][]<br>
>><br>
>>     Thanks,<br>
>>     M<br>
>>     _______________________________________________<br>
>>     datatable-help mailing list<br>
>>     <a href="mailto:datatable-help@lists.r-forge.r-project.org">datatable-help@lists.r-forge.r-project.org</a><br>
>>     <mailto:<a href="mailto:datatable-help@lists.r-forge.r-project.org">datatable-help@lists.r-forge.r-project.org</a>><br>
>>     <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>
</div></div></blockquote></div><br></div>