[datatable-help] Filtering Based on Previous Observation

Michael Smith my.r.help at gmail.com
Wed Apr 30 10:59:54 CEST 2014


... and here's a new challenge. What if `a` is character?

DT <- data.table(a = as.character(c(1, 2, 2, 3)), b = 8:5)
DT[, L.a := c(NA, head(a, -1))][a != L.a | is.na(L.a)][, L.a := NULL][]

I still would like to compare equality with the previous
observation/row, and remove it if it's the same. (`diff` doesn't work
with characters.)

M



On 04/30/2014 04:55 PM, Michael Smith wrote:
> Chinmay,
> 
> Kudos, that's a nice one! It also can be generalized to longer lags.
> Thanks!
> 
> M
> 
> On 04/30/2014 03:59 PM, Chinmay Patil wrote:
>> You can try 
>>
>> DT
>> ##    a b
>> ## 1: 1 8
>> ## 2: 2 7
>> ## 3: 2 6
>> ## 4: 3 5
>>
>> DT[c(T,diff(a)!=0),]
>> ##    a b
>> ## 1: 1 8
>> ## 2: 2 7
>> ## 3: 3 5
>>
>>
>>
>>
>> On Tue, Apr 29, 2014 at 10:04 PM, Michael Smith <my.r.help at gmail.com
>> <mailto:my.r.help at gmail.com>> wrote:
>>
>>     All,
>>
>>     Is there some data.table-idiomatic way to filter based on a previous
>>     observation/row? For example, I want to remove a row if
>>     DT$a[row]==DT$a[row-1].
>>
>>     It could be done by first calculating the lag and then filtering based
>>     on that, but I wonder if there's a more direct way.
>>
>>     The following example works, but my feeling is there should be a more
>>     elegant solution:
>>
>>     ( DT <- data.table(a = c(1, 2, 2, 3), b = 8:5) )
>>     DT[, L.a := c(NA, head(a, -1))][a != L.a | is.na
>>     <http://is.na>(L.a)][, L.a := NULL][]
>>
>>     Thanks,
>>     M
>>     _______________________________________________
>>     datatable-help mailing list
>>     datatable-help at lists.r-forge.r-project.org
>>     <mailto:datatable-help at lists.r-forge.r-project.org>
>>     https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help
>>
>>


More information about the datatable-help mailing list