R语言高级数据结构data.table

2019-07-31 14:32:18 浏览数 (1)

对于data.frame大家应该很熟悉,它可以存储不同数据类型的向量数据。今天给大家介绍一个升级版的data.frame,其不仅可以存储不同数据类型还可以进行多列的并行运算。包的安装我们就不再赘述了(install.packages(“data.table”))。

首先看下此格式数据的生成:

  1. fread 自带的读入数据的函数,可以直接将txt,csv读入并生成相应的data.table格式数据。
  2. as.data.table 将R对象转化为data.table格式的数据,其对象可以为列表,向量,data.frame。
  3. setDT(x) 其直接将R对象转化为data.table数据类型,从而不改变数据地址。
代码语言:javascript复制
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的运算方式了,当然他还有一些更深的运算以及设置,如果有兴趣可以去更深入看看,目前我们也就用到这些。

0 人点赞