我想要做的是按特定日期对大型.csv文件进行子集以提取某些年份。
到目前为止我所做的是使用fread读取整个.csv文件,然后按日期按子集读取。
下面是一个例子(注意我已经生成了一些exmple数据而不是使用fread读取它):
# Example data.table created after reading in from fread
library("data.table")
DT <- data.table(seq(as.Date("1999-01-01"), as.Date("2009-01-01"), by="day"))
DT$Var <- sample(1000, size=nrow(DT), replace=TRUE)
colnames(DT) <- c("Date", "Var")
# subset to extract data for the year 2004
DT_2004 <- subset(DT, Date %in% as.Date("2004-01-01"):as.Date("2004-12-31"))
这有效,但要求我首先阅读整个.csv文件,其中包含非常大的.csv文件非常耗时。有没有办法在fread中设置.csv文件,以便我只阅读我想要的日期?
谢谢。
答案 0 :(得分:0)
我不认为fread
是问题所在。我已经使用fread
使用了350万行csv文件而且速度并不慢!我认为使用POSIXct日期可能会导致缓慢。请尝试使用IDate
。在?IDateTime
帮助中查找data.table
。描述说明:
带有整数存储的日期和时间类,用于快速排序和 分组。仍然是实验性的!
但这不是问题。针对您的具体问题,请尝试以下方法。
DT <- data.table(Date=seq(as.IDate("1999-01-01"),as.IDate("2009-01-01"),by="day"))
DT[,Var:=sample(1000,size=nrow(DT),replace=TRUE)] # ?`:=`
DT_2004 = DT[between(Date,as.IDate("2004-01-01"),as.IDate("2004-12-31")),.SD] # ?between
也许会有更多知识渊博的人来纠正我们的误解!在那之前,我希望这有一些帮助。