在数据处理量较大的时候,最为头痛的就是数据的读写、运算效率。
data.table处理大数据集(数据文件达到以1G为单位)时相对于R语言的基本函数在数据读写、处理速度都不能与之相比可以对比基础函数、dplyr包函数做同样运算处理的时间。可自行对比数据处理函数(filter、group_by、mutate、summarise),数据量在上100万左右,稍微复杂的计算差距就特别明显。
但对于复杂的数据如何还尚未试验。
data.table包除了处理速度快外另一个有点是代码简洁。
fread(input, sep, header stringsAsFactors, encoding)
input 需要读取的数据;
sep 列的分隔符;
header 第一行是否为列名;
stringsASFactors 是否转化字符串为因子;
encoding 默认"unknown",在读取数据乱码的时候可以变更,以在软件中显示正常,而通常也是文本和网页数据会出现编码的问题;
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;
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 重塑数据时连接字符变量的连接符,默认为“_”;
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值;
这个工具可以与之前文章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参数
喜欢的话,欢迎关注小编