data.table可以扩展和增强data.frame的功能,在分组操作和组合时访问速度更快。
require(data.table) theDT = data.table(A=1:10, B=letters[1:10], C=letters[11:20], D=rep(c("one", "two", "three"), length.out=10)) # data.frame会将字符型数据转化为factor,而data.table不会,这里仍是character class(theDT$B) library(ggplot2) # 将data.frame数据转化为data.table diamondsDT = data.table(diamonds)
# 访问方法类似,但是以下两种才能返回列向量 theDT[,list(A, C)] theDT[, c("A", "C"), with=FALSE] # 只返回一行,数据的结构性被破坏 theDT[, c(A, C)]
data.table一个重要特性是可以设置指针,设置了之后,可以用指针的值来访问行数据。
可以通过tables()查看当前所有data.table的信息;可以用key(tableName)查看已经设置的指针key
# D没引号 setkey(theDT, D) # 可以将多个列设为指针 setkey(diamondsDT, cut, color) # Ideal是cut的取值,E,D是color的取值 diamondsDT[J("Ideal", c("E", "D")), ]
汇总数据:这里是按照cut和color汇总(先以cut分,同一cut下再按color分),汇总的方法是对price取均值,对carat取总和
使用list的地方也可以是单个变量,总之非常灵活。
diamondsDT[, list(price=mean(price), caratSum=sum(carat)), by=list(cut,color)]