仅使用data.table包r中的Fread写入具有特定日期的行

时间:2015-01-06 09:42:22

标签: r data.table fread

我想要做的是按特定日期对大型.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文件,以便我只阅读我想要的日期?

谢谢。

1 个答案:

答案 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

也许会有更多知识渊博的人来纠正我们的误解!在那之前,我希望这有一些帮助。