[datatable-help] Filtering Based on Previous Observation

Chinmay Patil chinmay.patil at gmail.com
Wed Apr 30 11:11:03 CEST 2014


Try


DT[c(T, tail(a, -1) != head(a,-1))]

##    a b
## 1: 1 8
## 2: 2 7
## 3: 3 5


On Wed, Apr 30, 2014 at 4:59 PM, Michael Smith <my.r.help at gmail.com> wrote:

> ... 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
> >>
> >>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/datatable-help/attachments/20140430/ef765669/attachment-0001.html>


More information about the datatable-help mailing list