待到最近才发现了这么一个牛逼的包 data.table。它的fread函数读取1G的CSV文件才用了20s左右。其他对data.frame的操作,也快了N倍。这篇笔记包括简介,data.table的特点,速度比较,常见语法。
简介
data.table继承于data.frame。它提供了一个快速通道,让我们能更加快速的读取文件,对数据进行筛选、分组、排序、联表,而且其语法灵活、简介。由于data.table是一个data.frame所以它几乎兼容所有的函数。特点
- data.table(DT)的操作语句类似于SQL,DT[i, j, by]中的i, j, by 对应着SQL语句的 i=where, j=select, by=group by。所以DT中的i, j并不是只是像data.frame只代表着行列,它更加的灵活多变。
- 符号 ” := “快速的增加或者删除列,类似SQL的update。
setkey(DT, colA, colB)
,可以使得检索和分组更加快速- order,快速多重排序, 例如对DT按照x,y进行排序
DT[order(DT$x, -DT$y),]
或者DT[with(DT, order(x, -y)),]
compare
包括使用DT使用Key后与DF的检索速度对比。
快速分组(需要设置KEY),进行计算,和使用tapply分组计算速度
###生成数据
grpsize <- ceiling(1e7/26^2) ##10^7 rows, 676 groups
DF <- data.frame(x=rep(LETTERS,each=26*grpsize),
y=rep(letters,each=grpsize), v=runif(grpsize*26^2),
stringsAsFactors=FALSE)
head(DF,3)
x y v
1 A a 0.5310106
2 A a 0.1980941
3 A a 0.8835322
DT <- as.data.table(DF)