我在R中有500多万行,每行只有4列。其中一列是收集数据的日期。一个例子是
Date PI SSC GC
2/11/2013 0.52 0.89 4.2
2/11/2013 0.56 0.45 12.0
2/11/2013 0.49 0.89 13.1
2/11/2013 0.59 0.47 4.8
2/11/2013 0.61 0.58 12.3
我想知道是否有办法只读取某些日期对应的某些行,而不是必须读取500万行然后进行子集化。例如,对应于日期2/11/2013的所有行(我不知道文件中有多少行)。此外,如果有任何帮助,Date列的类是factor。
答案 0 :(得分:2)
虽然不完全是用户要求的答案,但5 mil行并不是真的太难阅读。当然基数R read.table
将非常慢,但使用fread
包中的data.table
速度已经足够快了。以下是基准
tbl <- read.table(header=T, stringsAsFactors=F, text='Date PI SSC GC
2/11/2013 0.52 0.89 4.2')
require(data.table)
#create hige datatable with 5mil rows to write to temp file
bigtbl <- rbindlist( lapply(1:(5*1e6), function(x) tbl))
write.table(bigtbl, row.names=F, quote=F, file="temp.txt")
#benchmark of reading 5 mil row file back using fread function
system.time(bigtbl2 <- fread('temp.txt'))
## Read 5000000 rows and 4 (of 4) columns from 0.116 GB file in 00:00:11
## user system elapsed
## 10.76 0.08 10.86
当然内存大小可能仍然值得关注,但在这种情况下它仍然只有153MB
> tables()
NAME NROW MB COLS KEY
[1,] bigtbl2 5,000,000 153 Date,PI,SSC,GC
Total: 153MB
如果您要经常阅读此数据,使用save
函数将数据保存在标准RData文件中并使用load