我有一个数据表列表
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
另一种选择是从tidyverse
map
library(tidyverse)
map(l, ~ .x %>%
filter(id == 3))