[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