假设我有这样一个列表,其中包含 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})
最佳答案
明智地使用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
关于list - 删除列表中多个数据帧的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7012981/