如何用lapply筛选列表中每个data.table的ID为3的记录?
提取列表中每个data.table的指定ID记录
当然可以实现你的需求!你想到用替代变量(比如你说的xx)的思路完全没问题,只不过在lapply里需要通过匿名函数来传递这个代表每个列表元素的临时变量,具体写法有两种常用方式:
方式1:用subset()函数配合匿名函数
你可以直接把subset()放到匿名函数里,让xx作为每个列表元素的占位符:
library(data.table); set.seed(42) l <- list(data.table(id=1:5, x=rnorm(5)), data.table(id=1:5, x=rnorm(5))) # 提取每个data.table中id=3的记录 result <- lapply(l, function(xx) subset(xx, id == 3))
这里的xx就是你想要的替代变量,你也可以换成其他名字(比如dt),只要匿名函数内部保持一致就行。
方式2:用data.table原生筛选语法(更高效)
因为你处理的是data.table类型,用它原生的方括号筛选语法会更贴合data.table的设计,运行效率也更高:
result <- lapply(l, function(xx) xx[id == 3])
这种写法省去了调用subset()的步骤,是data.table用户更常用的筛选方式。
运行上面任意一种代码后,result就是一个新的列表,其中每个元素都是原列表对应data.table里id=3的那条记录。比如用你设置的随机种子,第一个元素的x值会是0.3631284,第二个是-0.1061245。
内容的提问来源于stack exchange,提问作者bumblebee
相关产品推荐
相关产品推荐

