如何在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
相关产品推荐
相关产品推荐

