删除"清空"列表中的条目

时间:2014-04-02 17:00:05

标签: r function data-manipulation

我有list,每个条目都是data.frame。我还写了一个函数,试图清除没有行的data.frames:

delete_zeroes <- function(data){
  if(nrow(data) == 0){
    return(NULL)
  }  
  (data)
}

llply(data, delete_zeroes)

但是,这似乎只是将NULL放在匹配的条目上。我想完全摆脱每个匹配的条目。我怎么能做到这一点?

3 个答案:

答案 0 :(得分:3)

您可以使用逻辑索引排除data.frame没有行的所有项目:

# example data
l <- list(a=data.frame(a=1:3), b=data.frame(), c=data.frame(a=1:3))
# $a
#   a
# 1 1
# 2 2
# 3 3
# 
# $b
# data frame with 0 columns and 0 rows
# 
# $c
#   a
# 1 1
# 2 2
# 3 3

nr <- sapply(l, nrow)
# a b c 
# 3 0 3 

l <- l[nr > 0]
# $a
#   a
# 1 1
# 2 2
# 3 3
#
# $c
#   a
# 1 1
# 2 2
# 3 3

答案 1 :(得分:3)

尝试以下方法:

Filter(nrow, data)

答案 2 :(得分:1)

你可以尝试

sapply(LL, nrow)将为您提供列表中每个data.frame中包含行数的向量。 您将其与0进行比较,以获得逻辑向量作为列表的子集

的索引
LL <- list(data.frame(1:2), data.frame(), data.frame(3:4))
##  [[1]]
##    X1.2
##  1    1
##  2    2

##  [[2]]
##  data frame with 0 columns and 0 rows

##  [[3]]
##    X3.4
##  1    3
##  2    4

LL[sapply(LL, nrow) != 0]

##  [[1]]
##    X1.2
##  1    1
##  2    2

##  [[2]]
##    X3.4
##  1    3
##  2    4