data.table简介

data.table是R中一个强大的数据处理包,提供快速的数据分片、分组和聚合功能,比base R快约10倍。主要函数包括:`fread()`用于快速读取数据,`[ ]`操作符进行便捷的子集选择,`setkey()`用于设置键以加速查询。此外,`merge()`实现快速融合数据,`duplicated()`和`unique()`处理重复值。参考文档包括Introduction、FAQs、重塑和键的使用。
摘要由CSDN通过智能技术生成

data.table是一个十分有效的数据处理包,它是data.frame的一个扩展,能够快速的对数据进行分片,分组,聚合等操作,比data.frame快很多。在数据处理方面,据实验结果表明,对于2G的数据,tapply耗时16秒,而data.table耗时1.6秒,快了10倍,官方还介绍说,对于100G的数据,它还能运行很好。
下面介绍几个主要用到的函数:

fread

read.table相似,但是更快更方便

fread(input, sep="auto", sep2="auto", nrows=-1L, header="auto", na.strings="NA", file,
stringsAsFactors=FALSE, verbose=getOption("datatable.verbose"), autostart=1L,
skip=0L, select=NULL, drop=NULL, colClasses=NULL,
integer64=getOption("datatable.integer64"), # default: "integer64"
dec=if (sep!=".") "." else ",", col.names,
check.names=FALSE, encoding="unknown", quote="\"",
strip.white=TRUE, fill=FALSE, blank.lines.skip=FALSE, key=NULL,
showProgress=getOption("datatable.showProgress"), # default: TRUE
data.table=getOption("datatable.fread.datatable") # default: TRUE
)

主要参数:
input:输入的文件,也可以是一个URL
sep:列的分隔符,默认的是符号集[,\t |;:]中的第一个
nrows:要读取的行数,默认为-1为全部
header:第一行是否为列名
stringAsFactors:是否把字符串的列转化为因子向量
skipskip>0意味着开始于第skip+1
select:选择要留下的列向量,丢弃剩下的
drop:和seelct相反
colClasses:设定列的类型,一个向量或一个列表
key:传递到setkey的列名的字符向量,像key="x,y,z"key=c("x","y","z"),只有当data.table=TRUE时才有效
data.table:TRUE时返回一个data.table,FALSE时返回一个data.frame

n=1e7
DT = data.table( a=sample(1:1000,n,replace=TRUE),
b=sample(1:1000,n,replace=TRUE),
c=rnorm(n),
d=sample(c("foo","bar","baz","qux","quux"),n,replace=TRUE),
e=rnorm(n),
f=sample(1:1000,n,replace=TRUE) )

 fwrite(DT,"DT.csv",row.names = F)

写入的数据507M。下面试一试freadread.csvread_csv的读入时间。

system.time(DT <- fread("DT.csv",header=F))

Read 10000001 rows and 6 (of 6) columns from 0.495 GB file in 00:02:01
  用户   系统   流逝 
118.44   1.83 121.09 

system.time(dt <- read.csv("DT.csv",header=F))
   用户    系统    流逝 
1436.48    6.53 1454.64

library(readr)
system.time(dt <- read_csv("DT.csv"))
 用户  系统  流逝 
19.67  0.58 22.26 

这儿有些奇怪,用readr包里的read_csv竟然比fread要快,我又试了几次,fread几次读取时间差别都很大,在读取到80%之前,几乎每秒读取20%,但是在80%上卡了,最后平均用时40多秒。

fsort

fsort(x, decreasing = FALSE, na.last = FALSE, internal=FALSE, verbose=FALSE, ...)

参数:
x:向量
decreasing:是否是降序排列
na.last:对NA的控制,如果TRUE,则数据中的缺失值放到最后,如果FALSE,放在最前,如果是NA,则去除。

 x = runif(1e7)
system.time(ans1 <- sort(x,method="quick"))
用户 系统 流逝 
2.53 0.10 2.62 

system.time(ans2 <- fsort(x))
用户 系统 流逝 
0.78 0.19 0.35 

duplicated

duplicated(x, incomparables=FALSE, fromLast=FALSE, by=seq_along(x), ...)

unique(x, incomparables=FALSE, fromLast=FALSE, by=seq_along(x), ...)

参数:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值