r语言 - 删除列表中的"empty"条目



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

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

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

您可以使用逻辑索引来排除具有没有行的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

尝试以下操作:

Filter(nrow, data)
你可以

试试

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    

最新更新