You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在fread中直接筛选time>25的行,避免全量读取后再子集化?

如何在data.table的fread中直接筛选行?

完全可行,data.table从1.14.0版本开始,fread支持filter参数,可以在读取数据的同时直接过滤行,不用先加载全量数据再子集化,非常适合处理百万级的大型数据集。

先纠正你原代码里的一个小问题:text参数是用来读取字符串内容的,读取文件应该用file参数,否则会把文件路径当成文本内容解析,这会导致错误。

修改后的代码如下:

dat <- fread(file = "C:/data.txt", 
             header = FALSE, 
             skip = 100,
             fill = TRUE, 
             select = c(1, 2, 3),
             col.names = c("time", "B", "C"),
             na.strings = "#",
             filter = "time > 25")

关键说明:

  • filter参数中直接写过滤条件,这里用time > 25对应你的需求,列名要和col.names里定义的一致
  • 由于你已经通过na.strings = "#"把#识别为NA,time > 25会自动排除NA值的行(因为NA和数值比较结果为NA,会被过滤),所以不需要再额外调用na.omit
  • 如果你的data.table版本低于1.14.0,先执行install.packages("data.table")升级到最新版本才能使用filter功能

内容的提问来源于stack exchange,提问作者ACE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 22:23:09