[R] subsetting a list of dataframes
William Dunlap
wdunlap at tibco.com
Wed May 18 16:27:28 CEST 2011
> -----Original Message-----
> From: r-help-bounces at r-project.org
> [mailto:r-help-bounces at r-project.org] On Behalf Of Lara Poplarski
> Sent: Tuesday, May 17, 2011 4:14 PM
> To: r-help at r-project.org
> Subject: Re: [R] subsetting a list of dataframes
>
> Thank you all, this is exactly what I had in mind, except
> that I still have
> to get my head around apply et al. Back to the books for me then!
>
> Lara
>
> On Tue, May 17, 2011 at 2:41 PM, Jannis <bt_jannis at yahoo.de> wrote:
>
> > Have a look at lapply(). Something like:
> >
> > entries.with.nrows=lapply(data,function(x)dim(x)[1]>1)
Note that the above suggestion does not work in R 2.13.0:
> listOfDataFrames <- list(three=data.frame(x=11:13,y=101:103),
one=data.frame(x=1,y=2),
five=data.frame(x=1:5,y=11:15))
> listOfDataFrames[lapply(listOfDataFrames,function(x)nrow(x)>1)]
Error in listOfDataFrames[lapply(listOfDataFrames, function(x) nrow(x)
> :
invalid subscript type 'list'
lapply(...) always returns a list and lists are not acceptable as
subscripts. Instead, make the subscript one of the following:
as.logical(lapply(...))
sapply(...) # and hope that FUN always returns TRUE or FALSE and
length(list)>0
vapply(..., FUN.VALUE=FALSE)
It may be a bit quicker to do the >0 outside of the loop, as in
as.integer(lapply(listOfDataFrames, FUN=nrow)) > 0
or
vapply(listOfDataFrames, FUN=nrow, FUN.VALUE=0L) > 0
but you need a pretty long list to notice.
Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
> >
> > should give you a vector with the elements of the list that
> you seek marked
> > with TRUE.
> >
> > This vector can then be used to extract a subset from your list by:
> >
> > data.reduced=data[entries.with.nrows]
> >
> > Or similar....
> >
> >
> > HTH
> > Jannis
> >
> > --- Lara Poplarski <larapoplarski at gmail.com> schrieb am Di,
> 17.5.2011:
> >
> > > Von: Lara Poplarski <larapoplarski at gmail.com>
> > > Betreff: [R] subsetting a list of dataframes
> > > An: r-help at r-project.org
> > > Datum: Dienstag, 17. Mai, 2011 20:24 Uhr
> > > Hello All,
> > >
> > > I have a list of dataframes, and I need to subset it by
> > > keeping only those
> > > dataframes in the list that meet a certain criterion.
> > > Specifically, I need
> > > to generate a second list which only includes those
> > > dataframes whose number
> > > of rows is > 1.
> > >
> > > Could someone suggest how to do this? I have come close to
> > > what I need with
> > > loops and such, but there must be a less clumsy way...
> > >
> > > Many thanks,
> > > Lara
> > >
> > > [[alternative HTML version deleted]]
> > >
> > > ______________________________________________
> > > R-help at r-project.org
> > > mailing list
> > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > PLEASE do read the posting guide
> > http://www.R-project.org/posting-guide.html
> > > and provide commented, minimal, self-contained,
> > > reproducible code.
> > >
> >
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
More information about the R-help
mailing list