如何从数据帧列表中删除nrow <n的数据帧?

时间:2019-10-17 12:38:58

标签: r list dataframe

我有一个数据帧列表,大小不等。我要删除的行很少(让我们说<3)。

到目前为止,这是我一直在努力的工作,

d1 <- data.frame(y1 = c(1, 2, 3, 9), y2 = c(4, 5, 6, 7))
d2 <- data.frame(y1 = c(3, 2, 1, 6), y2 = c(6, 5, 4, 4))
d3 <- data.frame(y1 = c(3, 2), y2 = c(6, 5))
d4 <- data.frame(y1 = c(3, 2), y2 = c(6, 5))
listdfs <- list(d1, d2, d3, d4)


listdfs2<-lapply(listdfs,function(x) if(nrow<10<-NULL)))

因此,基本上应保持d1和2。

谢谢。

3 个答案:

答案 0 :(得分:3)

这可以通过Filter完成,即

Filter(function(i) nrow(i) > 3, listdfs)

[[1]]
  y1 y2
1  1  4
2  2  5
3  3  6
4  9  7

[[2]]
  y1 y2
1  3  6
2  2  5
3  1  4
4  6  4

答案 1 :(得分:2)

您可以这样做:

listdfs[lapply(listdfs, nrow) > 3]

[[1]]
  y1 y2
1  1  4
2  2  5
3  3  6
4  9  7

[[2]]
  y1 y2
1  3  6
2  2  5
3  1  4
4  6  4

答案 2 :(得分:2)

另一种选择是使用discard中的purrr

purrr::discard(listdfs, ~ nrow(.) < 3)

[[1]]
  y1 y2
1  1  4
2  2  5
3  3  6
4  9  7

[[2]]
  y1 y2
1  3  6
2  2  5
3  1  4
4  6  4