我有一个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