我有list
,每个条目都是data.frame
。我还写了一个函数,试图清除没有行的data.frames:
delete_zeroes <- function(data){
if(nrow(data) == 0){
return(NULL)
}
(data)
}
llply(data, delete_zeroes)
但是,这似乎只是将NULL
放在匹配的条目上。我想完全摆脱每个匹配的条目。我怎么能做到这一点?
答案 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