[R] Removing objects from a list based on nrow

jim holtman jholtman at gmail.com
Sun Nov 29 15:10:11 CET 2009


One thing to be careful of is if no dataframe have less than 3 rows:

> df1<-data.frame(letter=c("A","B","C","D","E"),number=c(1,2,3,4,5))
> df2<-data.frame(letter=c("A","B"),number=c(1,2))
> df3<-data.frame(letter=c("A","B","C","D","E"),number=c(1,2,3,4,5))
> df4<-data.frame(letter=c("A","B","C","D","E"),number=c(1,2,3,4,5))
>
> lst<-list(df1,df3,df4)
> lst
[[1]]
  letter number
1      A      1
2      B      2
3      C      3
4      D      4
5      E      5

[[2]]
  letter number
1      A      1
2      B      2
3      C      3
4      D      4
5      E      5

[[3]]
  letter number
1      A      1
2      B      2
3      C      3
4      D      4
5      E      5

> lst[-which(sapply(lst, nrow) < 3)]
list()
>

Notice the list is now empty.  Instead use:

> lst[sapply(lst, nrow) >=3]
[[1]]
  letter number
1      A      1
2      B      2
3      C      3
4      D      4
5      E      5

[[2]]
  letter number
1      A      1
2      B      2
3      C      3
4      D      4
5      E      5

[[3]]
  letter number
1      A      1
2      B      2
3      C      3
4      D      4
5      E      5


On Sun, Nov 29, 2009 at 3:43 AM, Linlin Yan <yanlinlin82 at gmail.com> wrote:
> Try these:
> sapply(lst, nrow) # get row numbers
> which(sapply(lst, nrow) < 3) # get the index of rows which has less than 3 rows
> lst <- lst[-which(sapply(lst, nrow) < 3)] # remove the rows from the list
>
> On Sun, Nov 29, 2009 at 4:36 PM, Tim Clark <mudiver1200 at yahoo.com> wrote:
>> Dear List,
>>
>> I have a list containing data frames of various numbers of rows.  I need to remove any data frame that has less than 3 rows.  For example:
>>
>> df1<-data.frame(letter=c("A","B","C","D","E"),number=c(1,2,3,4,5))
>> df2<-data.frame(letter=c("A","B"),number=c(1,2))
>> df3<-data.frame(letter=c("A","B","C","D","E"),number=c(1,2,3,4,5))
>> df4<-data.frame(letter=c("A","B","C","D","E"),number=c(1,2,3,4,5))
>>
>> lst<-list(df1,df2,df3,df4)
>>
>> How can I determine that the second object (df2) has less than 3 rows and remove it from the list?
>>
>> Thanks!
>>
>> Tim
>>
>>
>>
>>
>> Tim Clark
>> Department of Zoology
>> University of Hawaii
>>
>> ______________________________________________
>> 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.
>>
>
> ______________________________________________
> 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.
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?




More information about the R-help mailing list