我有一个数据帧列表,大小不等。我要删除的行很少(让我们说<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。
谢谢。
答案 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