对于data.frame大家应该很熟悉,它可以存储不同数据类型的向量数据。今天给大家介绍一个升级版的data.frame,其不仅可以存储不同数据类型还可以进行多列的并行运算。包的安装我们就不再赘述了(install.packages(“data.table”))。
首先看下此格式数据的生成:
- fread 自带的读入数据的函数,可以直接将txt,csv读入并生成相应的data.table格式数据。
- as.data.table 将R对象转化为data.table格式的数据,其对象可以为列表,向量,data.frame。
- setDT(x) 其直接将R对象转化为data.table数据类型,从而不改变数据地址。
DF =data.frame(x=rep(c("b","a","c"),each=3),y=c(1,3,6), v=1:9)
DT=as.data.table(DF,keep.rownames=TRUE)
接下来我们看下data.table数据类型的运算,其基础的运算既包含data.frame所有的运算方式,同时又有升级的运算:
1. 筛选数据可以直接填写判断公式,省掉了which/grep或者==/>等。
代码语言:javascript复制DT[1:3]
DT[x=="a"]
2. 列的选取也发生了改变,其中引入了list的别名 .() 进行数据筛选:
代码语言:javascript复制DT[,y]
DT[,.(y)]
3. data.table中数据函数的调用以及并行运算的加入:
代码语言:javascript复制DT[,sum(y)]
DT[,.(sum(y),sum(v))]
4. 自定义函数的执行,需要用{}包裹所有的命令。
代码语言:javascript复制DT[,{print(y); plot(y)}]
5. 分组计算的运算,可以单列分组也可以多列分组:
代码语言:javascript复制DT[,.(sum=sum(y)),by=x]
DT[,.(sum=sum(v)),by=.(x,y)]
6. 各分组的计数函数.N,例:
代码语言:javascript复制DT[,.N,by=x]
7. 其中数据各列的增加,删除,修改,用到的函数是:=。
代码语言:javascript复制DT[,y1:=y]
DT[,y:=NULL]
DT[,y:=(y 1)]
以上就是data.table的运算方式了,当然他还有一些更深的运算以及设置,如果有兴趣可以去更深入看看,目前我们也就用到这些。