如何在R中导入大数据集,对于很多人(me included)来说非常棘手(当然对于R高手来说very easy),但是被重复问及,就难免想总结一些自己平常用的比较多的方法。其实方法比较多,或许我的方法在某些人面前都out了。 首先产生一个较大数据集:
- bigdf <- data.frame(dim=sample(letters,replace=T,4e6),fact1=rnorm(4e6),fact2=rnorm(4e6,20,50))
- > write.csv(bigdf,'bigdf.csv',quote = F)
复制代码 然后,
- system.time(read.csv('bigdf.csv'),header=TRUE) #230.11 seconds
复制代码 然后,使用sqldf包中的sqldf重新try:
- system.time(bigdf <- sqldf("select * from f", dbname = tempfile(), file.format = list(header = T, row.names = F)))#55.43 seconds
复制代码 节约了3分钟左右,差异是不是很惊人!当然这是不是最快的?答案是NO!很多包提供了其它的方法,ff包、data.table包都提供了一些很不错的方法:
- system.time(bigdf <-fread('bigdf.csv',header=T)) #29.83seconds
复制代码 还有其它很多方法可以帮助提高读取数据的速度,比如,read.table中指定数据类型(colClasses)和行数(nrows)等等。当然不同情况,适合用不同方法,这里就不在说了。