r语言 - 数据列表:按变量过滤



我有一个数据表列表

library(data.table); set.seed(42)
l <- list(data.table(id=1:5, x=rnorm(5)), data.table(id=1:5, x=rnorm(5)))
> l
[[1]]
id          x
1:  1  1.3709584
2:  2 -0.5646982
3:  3  0.3631284
4:  4  0.6328626
5:  5  0.4042683
[[2]]
id           x
1:  1 -0.10612452
2:  2  1.51152200
3:  3 -0.09465904
4:  4  2.01842371
5:  5 -0.06271410

每个 ID 都相同。

我想从每个元素中仅提取ID 3,但不知道这是如何工作的。我想lapply(l, )但不知道如何继续。每个列表元素都有一个标准变量,比如xx,所以我可以使用lapply(l,subset(xx, id==3))

使用data.table子集(应该更快(:

lapply(l, "[", id == 3)

在这种情况下,我们可以在没有匿名调用的情况下使用subset

lapply(l, subset, id == 3)
#[[1]]
#   id         x
#1:  3 0.3631284
#[[2]]
#   id           x
#1:  3 -0.09465904

另一种选择是从tidyversemap

library(tidyverse)
map(l, ~ .x %>%
filter(id == 3))