R语言data.table包高效数据处理(大量数据分析/处理)

在数据处理量较大的时候,最为头痛的就是数据的读写、运算效率。

       data.table处理大数据集(数据文件达到以1G为单位)时相对于R语言的基本函数在数据读写、处理速度都不能与之相比可以对比基础函数、dplyr包函数做同样运算处理的时间。可自行对比数据处理函数(filter、group_by、mutate、summarise),数据量在上100万左右,稍微复杂的计算差距就特别明显。

       但对于复杂的数据如何还尚未试验。

data.table包除了处理速度快外另一个有点是代码简洁。

1、fread函数(列出常用的参数)可以对比read.csv、read.xlsx

  fread(input, sep, header stringsAsFactors, encoding) 

     input    需要读取的数据;
     sep    列的分隔符;
     header    第一行是否为列名;
     stringsASFactors    是否转化字符串为因子;
     encoding    默认"unknown",在读取数据乱码的时候可以变更,以在软件中显示正常,而通常也是文本和网页数据会出现编码的问题;

2、fwrite函数(列出常用的参数)

    fwrite(data, file , append ,sep, row.names, col.names)

     data    你需要写出/保存的数据;
     file    保存到本地的文件名,;
     append    如果TRUE,在你之前保存到本地的原文件后面添加新数据;
     sep    列的分隔符;
     row.names    是否写出行名,因为data.table没有行名,所以默认FALSE;
     col.names     是否写出列名,默认TRUE,如果没有定义,并且append=TRUE和文件存在,那么就会默认使用FALSE;

3、dcast.data.table  长数据转宽数据     可以对比tidyr包中相应的 函数

dcast.data.table是reshape2::dcast的更快版本,并且能够非常高效地处理非常大的数据集

   dcast(data, formula, fun, sep )  列举常用参数

   data   你所需要转换的数据,注意必须为data.table格式,不能为其他(如 :data.frame、txt、csv);

    formula    需要重塑数据的规则,基本语法是var1~var2,其中若var1、var2为“...”或者“.”时,前者代表全部变量,后者便是无任何变量,var1是不变的列,var2是变化的列,其值变为列名;

    fun    是否在重塑前汇总处理,如mean,sum或c(sum,mean),默认为length;

    sep    重塑数据时连接字符变量的连接符,默认为“_”;

4、melt函数(列出常用的参数)宽数据转长数据   可以对比reshape2包中的函数

  melt(data, id.vars, measure.vars,variable.name , value.name,na.rm)

    data    你所需要转换的数据,注意必须为data.table格式,不能为其他(如 :data.frame、txt、csv);

    id.vars    不变的列,id变量组成的矢量,可以对应列号,也可以对应列名;缺失的话,非测量变量会被赋值;

    measure.vars   变化的列或者列表,同样可以对应列号和列名,也支持pattern函数,如果缺失,非id变量会被赋值;如果measure.vars和id.vars都没有,非数值列会作为id.vars,剩余的变量作为measure.vars;

    variable.name   measure.vars的名称,默认为"variable";

    value.name    融合后数据值的列名;

    na.rm    是否剔除na值;

5、DT[i,j,by]强大的切片、索引、分组工具   可以对比dplyr包中的函数

这个工具可以与之前文章dplyr包中的函数作对比,更加简洁、高效

相比于R的基础函数data.frame,DT要求数据为data.table格式,所以函数的一些同样功能的操作也有区别

5.1 data.table格式的数据选取两列:

iris[,.(Species,Petal.Length)]

5.2 同时筛选列中的某些值及某些列

iris[Species%in% c("setosa","virginica "),.(Species,Petal.Length)]

5.3 直接在原数据上生成新的列

iris[,co.petal := Petal.Length+Petal.Width]

iris[,`:=`(co.sepal= Sepal.Length+Sepal.Width,co.petal= Petal.Length+Petal.Width)]
5.4 删除某列数据:
iris[,Species:=NULL]
5.5 运用data.table中的函数进行计算,支持基本的统计函数、聚合函数

例子:

iris[Species %in% c("setosa","virginica "),.N](.N是一个计数函数,等价于count函数或length)

iris[Species %in% c("setosa","virginica ")& Petal.Length %between% c(1,5),.(Sepal.Length,Sepal.Width)]多条件计算

iris[,.(mean(Sepal.Length),mean(Sepal.Width)),by =Species]

mtcars[,.(sum(mpg),mean(disp)),by = .(gear,carb)]多分组计算

iris[Species %like%  "^set"]

 

下一篇写data.table包中的rbindlist、setkey、index、chmatch、like、setDT、setorder及DT中的mult、nomatch参数

喜欢的话,欢迎关注小编

 

你可能感兴趣的:(R语言数据分析包)