关闭

data.table

378人阅读 评论(0) 收藏 举报
分类:
'''
data.table(DT)的操作语句类似于SQL,DT[i, j, by]中的i, j, by 对应着SQL语句的 i=where, j=select, by=group by。所以DT中的i, j并不是只是像data.frame只代表着行列,它更加的灵活多变。
符号 ” := “快速的增加或者删除列,类似SQL的update。
setkey(DT, colA, colB),可以使得检索和分组更加快速
order,快速多重排序, 例如对DT按照x,y进行排序DT[order(DT$x, -DT$y),]或者DT[with(DT, order(x, -y)),]
'''
grpsize <- ceiling(1e7/26^2)  ##10^7 rows, 676 groups
DF <- data.frame(x=rep(LETTERS,each=26*grpsize),
                 y=rep(letters,each=grpsize), v=runif(grpsize*26^2),
                 stringsAsFactors=FALSE)

DT <- as.data.table(DF) ##creat data.table
setkey(DT,x,y)

###比较检索速度
system.time(DF[DF$x=="R"&DF$y=="h",])
system.time(DT[DT$x=="R"&DT$y=="h",])

####快速分组,按照x分组,然后计算sum(v)
#tapply
system.time(tapply(DT$v, DT$x, sum))
system.time(ss<-DT[,sum(v),by=x])
head(ss)
ss

###其他操作
##联表和统计计算,更清晰认知,DT[i,j,by]中的i,j,by对应着SQL语句的i=where,j=selet,by=group by 
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9) ##creat data.table DT
X = data.table(c("b","c"),foo=c(4,2)) ##use to join
setkey(DT,x) #set the key 
##join类型1,联表,X中有b,c
DT[X]
##join类型2,类似查询,.()表示list,类似于联一个1行2列的表哦
DT[.("a",3)]

DT[,list(mysum=sum(v),Mymin=min(v)),by=.(x)]
DT[,list(mysum=sum(v),Mymin=min(v)),by=x]




cd[, ypf :=xyf + chengyf + caoyf]
cd[,year:=as.Date(ISOdate(as.POSIXlt(cyrq)),1,1)]

if(false){
tmp_0=ddply(cd,.(year),function(cd){
data.frame(table(cd$cyfs)/length(cd$cyfs))})
tmp_0=tapply(cyfs,year,function(x){prop.table(table(x))})
tmp_0=ldply(tmp_0,data.frame)
}
#利用data.table完成比率计算
tmp_0=cd[,list(cf=sort(unique(cyfs)),ratio=as.numeric(table(cyfs)/length(cyfs))),by="year"]



0
0
查看评论

R语言data.table简介

data.table包提供了一个非常简洁的通用格式:DT[i,j,by],可以理解为:对于数据集DT,选取子集行i,通过by分组计算j,对比与dplyr等包,data.table的运行速度更快。创建一个data.table set.seed(1) DF = data.frame(x=c("...
  • a358463121
  • a358463121
  • 2016-05-23 18:17
  • 10265

R语言data.table速查手册

介绍R中的data.table包提供了一个data.frame的高级版本,让你的程序做数据整型的运算速度大大的增加。data.table已经在金融,基因工程学等领域大放光彩。他尤其适合那些需要处理大型数据集(比如 1GB 到100GB)需要在内存中处理数据的人。不过这个包的一些符号并不是很容易掌握,...
  • a358463121
  • a358463121
  • 2016-07-14 17:59
  • 5536

Data.Table若干高级技巧【R package】

data.table是由Matt Dowle创件的一个数据处理的包。其设计的主要目的是高效迅速的对大批量数据分组处理操作。 它通过高效内存操作,设置keys、快速分组,以及滚动时序的快速合并的技巧,使其达到令人惊讶的效率。data.table主要通过二元检索法大大提高数据操作的效率,当然同时它也兼容...
  • IqqIqqIqqIqq
  • IqqIqqIqqIqq
  • 2016-07-02 22:19
  • 1478

懒癌必备-dplyr和data.table让你的数据分析事半功倍

最近Erin在做信用风险评级模型的开发,几千行的代码敲的我头晕眼花。作为一个懒癌晚期,并且追求高效率的数据er,怎么能受得了浪费时间去造轮子呢。接下来,我就为大家分享几个我在工作当中最常用来做数据分析用到的包,dplyr和data.table,我保证你get到这两个包后,就再也不想用R里面自带的基础...
  • lll1528238733
  • lll1528238733
  • 2017-08-06 12:32
  • 769

R语言 data.table包 数据清理(二)

data.table包 这个包让你可以更快地完成数据集的数据处理工作。放弃选取行或列子集的传统方法,用这个包进行数据处理。用最少的代码,你可以做最多的事。相比使用data.frame,data.table可以帮助你减少运算时间。你一定会对这个包的简洁性感到震惊。 一个数据表格包含三部...
  • c1z2w3456789
  • c1z2w3456789
  • 2016-03-16 10:47
  • 3332

R︱高效数据操作——data.table包(实战心得、dplyr对比、key灵活用法、数据合并)

由于业务中接触的数据量很大,于是不得不转战开始寻求数据操作的效率。于是,data.table这个包就可以很好的满足对大数据量的数据操作的需求。 data.table可是比dplyr以及Python中的pandas还好用的数据处理方式。 data.table包的语法简洁,并且只需一行代码就可以完...
  • sinat_26917383
  • sinat_26917383
  • 2016-10-24 17:27
  • 9137

R data.table系统学习

data.table 教程 最近使用data.table这个增强包,来计算数据的聚合信息,比sql语句简单明了不是一点半点,于是想把data.table的资料翻译出来。 目录: 1) data.table 介绍 2) 语义引用 3) 主键、基于二...
  • smart_xiao_xiong
  • smart_xiao_xiong
  • 2016-06-13 15:43
  • 1807

data table使用

转载 R data table 使用简介
  • qq_32424029
  • qq_32424029
  • 2016-07-29 17:50
  • 1984

R语言-data.table包

待到最近才发现了这么一个牛逼的包 data.table。它的fread函数读取1G的CSV文件才用了20s左右。其他对data.frame的操作,也快了N倍。这篇笔记包括简介,data.table的特点,速度比较,常见语法。 简介 data.table继承于data.frame。它提供了一个快速通...
  • qq_27755195
  • qq_27755195
  • 2016-03-18 00:54
  • 6679

R语言-data.table包使用(方便自己使用参考)

R语言-data.table包 它的fread函数读取1G的CSV文件才用了20s左右。其他对data.frame的操作,也快了N倍 特点 data.table(DT)的操作语句类似于SQL,DT[i, j, by]中的i, j, by 对应着SQL语句的 i=where, j=select,...
  • q383700092
  • q383700092
  • 2016-08-19 10:57
  • 3867
    个人资料
    • 访问:55233次
    • 积分:1171
    • 等级:
    • 排名:千里之外
    • 原创:47篇
    • 转载:42篇
    • 译文:3篇
    • 评论:2条
    最新评论