2

假设我有这样一个列表,其中包括 3 个名为 1、3 和 4 的数据框:

        1                   3           4  
1   A   c(2, 1, 3, 1, 2)    c(1, 1, 2)  c(1, 1)
2   B   c(1, 1, 1, 3, 2)    c(2, 1, 2)  c(2, 1)

如您所见,数据框具有所有相同的列(A 和 B),但行数不同。如何删除列表中所有数据框的 B 列中值 < 2 的行?

我试过 lapply 任何:

list <- lapply(list, function(x) {x <- any(x[,c(2)] < 2);x})
4

2 回答 2

3

明智地使用lapply()和简单的子集设置与任何方法一样好。使用您的数据l

l <- list("1" = data.frame(A = c(2, 1, 3, 1, 2), B = c(1, 1, 1, 3, 2)),
          "3" = data.frame(A = c(1,1,2), B = c(2,1,2)),
          "4" = data.frame(A = c(1,1), B = c(2,1)))

这做你想要的

lapply(l, function(x) x[x$B >= 2,])

给予:

> lapply(l, function(x) x[x$B >= 2,])
$`1`
  A B
4 1 3
5 2 2

$`3`
  A B
1 1 2
3 2 2

$`4`
  A B
1 1 2
于 2011-08-10T15:16:33.393 回答
1

像这样的东西怎么样:

lst <- lapply(lst, function(x) {subset(x, B >= 2)})
于 2011-08-10T15:12:11.267 回答