这个包让你可以更快地完成数据集的数据处理工作。放弃选取行或列子集的传统方法,用这个包进行数据处理。用最少的代码,你可以做最多的事。相比使用data.frame,data.table可以帮助你减少运算时间。一个数据表格包含三部分,即DT[i, j, by]。你可以理解为我们告诉R用i来选出行的子集,并计算通过by来分组的j。大多数时候,by是用于类别变量的。

特点


  • 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))

示例


安装及载入程序包

install.packages("data.table")
library(data.table)
  • 使用data.table的fread()函数,用下面的方式,快速直接读取航班数据

    flights <- fread("https://raw.githubusercontent.com/wiki/arunsrinivasan/flights/NYCflights14/flights14.csv")
  • 查看数据

    > mydata <- data.table(iris)
    > mydata
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
    1: 5.1 3.5 1.4 0.2 setosa
    2: 4.9 3.0 1.4 0.2 setosa
    3: 4.7 3.2 1.3 0.2 setosa
    4: 4.6 3.1 1.5 0.2 setosa
    5: 5.0 3.6 1.4 0.2 setosa
    ---
    146: 6.7 3.0 5.2 2.3 virginica
    147: 6.3 2.5 5.0 1.9 virginica
    148: 6.5 3.0 5.2 2.0 virginica
    149: 6.2 3.4 5.4 2.3 virginica
    150: 5.9 3.0 5.1 1.8 virginica
  • 条件选择
    > mydata[Species =="setosa" & Sepal.Length > 5.0 & Sepal.Width == 3.5,c("Sepal.Length","Sepal.Width","Species")]
    Sepal.Length Sepal.Width Species
    1: 5.1 3.5 setosa
    2: 5.1 3.5 setosa
    3: 5.2 3.5 setosa
    4: 5.5 3.5 setosa
  • 计算:.() 表示list
    > mydata[,sum(Sepal.Length,na.rm = TRUE)]
    [1] 876.5
    > mydata[,.(sum(Sepal.Length,na.rm = TRUE),sd(Sepal.Length),mean(Sepal.Length)),by=Species]
    Species V1 V2 V3
    1: setosa 250.3 0.3524897 5.006
    2: versicolor 296.8 0.5161711 5.936
    3: virginica 329.4 0.6358796 6.588

上面的函数等价于:

mydata[,list(V1=sum(Sepal.Length,na.rm = TRUE),
V2=sd(Sepal.Length),
V3=mean(Sepal.Length)),
by=.(Species)]
  • 函数

    mydata[,{
    print(Sepal.Length)
    plot(Sepal.Width)
    }]
  • setkey

    setkey(mydata,Species)
    mydata["setosa"]
    mydata[c("setosa","virginica")]
  • 排序

    > mydata[order(Sepal.Length,-Sepal.Width)]
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
    1: 4.3 3.0 1.1 0.1 setosa
    2: 4.4 3.2 1.3 0.2 setosa
    3: 4.4 3.0 1.3 0.2 setosa
    4: 4.4 2.9 1.4 0.2 setosa
    5: 4.5 2.3 1.3 0.3 setosa
    ---
    146: 7.7 3.8 6.7 2.2 virginica
    147: 7.7 3.0 6.1 2.3 virginica
    148: 7.7 2.8 6.7 2.0 virginica
    149: 7.7 2.6 6.9 2.3 virginica
    150: 7.9 3.8 6.4 2.0 virginica
  • 特别的符号 .N 是一个内建的变量,它表示当前的分组中,对象的数目
    > mydata[Species =="setosa" & Sepal.Length > 5.0 & Sepal.Width == 3.5,.N]
    [1] 4
  • 如何获取每个机场起飞的航班数

    > flights[, .(.N), by=.(origin)]
    origin N
    1: JFK 81483
    2: LGA 84433
    3: EWR 87400
  • 当参数j和by里面只有一列,我们可以省略 .(),如:ans <- flights[, .N, by=origin]

  • 如何获取美航在所有机场的起/降的数目
    > ans <- flights[carrier == "AA", .N, by=.(origin,dest)]
    > head(ans)
    origin dest N
    1: JFK LAX 3387
    2: LGA PBI 245
    3: EWR LAX 62
    4: JFK MIA 1876
    5: JFK SEA 298
    6: EWR MIA 848
  • 如何获取美航在所有机场的起/降的平均延误时间
    > flights[carrier == "AA",
    + .(mean(arr_delay), mean(dep_delay)),
    + by=.(origin, dest, month)]
    origin dest month V1 V2
    1: JFK LAX 1 6.590361 14.2289157
    2: LGA PBI 1 -7.758621 0.3103448
    3: EWR LAX 1 1.366667 7.5000000
    4: JFK MIA 1 15.720670 18.7430168
    5: JFK SEA 1 14.357143 30.7500000
    ---
    196: LGA MIA 10 -6.251799 -1.4208633
    197: JFK MIA 10 -1.880184 6.6774194
    198: EWR PHX 10 -3.032258 -4.2903226
    199: JFK MCO 10 -10.048387 -1.6129032
    200: JFK DCA 10 16.483871 15.5161290

R(7): data.table的更多相关文章

  1. R之data.table -melt/dcast(数据合并和拆分)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 30.0px "Helvetica Neue"; color: #323333 } p. ...

  2. R之data.table速查手册

    R语言data.table速查手册 介绍 R中的data.table包提供了一个data.frame的高级版本,让你的程序做数据整型的运算速度大大的增加.data.table已经在金融,基因工程学等领 ...

  3. R语言data.table包fread读取数据

    R语言处理大规模数据速度不算快,通过安装其他包比如data.table可以提升读取处理速度. 案例,分别用read.csv和data.table包的fread函数读取一个1.67万行.230列的表格数 ...

  4. R语言数据分析利器data.table包 —— 数据框结构处理精讲

        R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理 ...

  5. R语言基因组数据分析可能会用到的data.table函数整理

    R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理快,内部 ...

  6. 将基因组数据分类并写出文件,python,awk,R data.table速度PK

    由于基因组数据过大,想进一步用R语言处理担心系统内存不够,因此想着将文件按染色体拆分,发现python,awk,R 语言都能够非常简单快捷的实现,那么速度是否有差距呢,因此在跑几个50G的大文件之前, ...

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

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 由于业务中接触的数据量很大,于是不得不转战开始 ...

  8. R读取大数据data.table包之fread

    >library(data.table)>data=fread("10000000.txt")>Read 9999999 rows and 71 (of 71) ...

  9. R语言数据分析利器data.table包—数据框结构处理精讲

    R语言数据分析利器data.table包-数据框结构处理精讲 R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代 ...

随机推荐

  1. 浅谈musql中using的使用---高性能(三)

    转载地址:https://blog.csdn.net/lppl010_/article/details/79429657 mysql中using的用法为: using()用于两张表的join查询,要求 ...

  2. ubuntu下安装go语言;sublime+gocode搭建;go的卸载和环境变量配个人.bashrc;2空位3个网

    https://blog.csdn.net/needkane/article/details/36891949 https://www.jianshu.com/p/4f79ae4f081c http: ...

  3. mahout推荐系统

    本章包含以下内容: 首先看一下实战中的推荐系统 推荐引擎的精度评价 评价一个引擎的准确率和召回率 在真实数据集:GroupLens 上评价推荐系统 我们每天都会对喜欢的.不喜欢的.甚至不关心的事情有很 ...

  4. vs2012团队连接(Team Foundation Server)连接不上的怎么办?

    项目管理的Team Foundation Server有时总是连接不上,报连接有误或没有权限,那怎么解决呢?

  5. Awk 从入门到放弃(2)– 分隔符 学习笔记

    转:http://www.zsythink.net/archives/1336 学习输入分隔符FS及输出分隔符OFS 通过-v 修改内置的变量,在$1 $2 之间不指定 ‘,’, 会做合并输出.

  6. (C/C++学习笔记) 十七. 面向对象程序设计

    十七. 面向对象程序设计 ● 面向对象程序设计的基本概念 ※ 类实际上是一种复杂的数据类型,它不仅包含不同类型的数据,还包含对这些数据的一些必要的操作. 而对象则是这种复杂的数据类型的一个变量. 类是 ...

  7. linux free 理解

    free命令:显示Linux系统中物理内存.buffer/cache.swap的使用情况. virtual-machine:~$ free total used free shared buffers ...

  8. DevExpress v18.1新版亮点——ASP.NET篇(二)

    用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress ASP.NET v18.1 的新功能,快来下载试用新版本!点 ...

  9. STL标准库-Tuple

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 在前面我介绍过一次tuple,今天在书上也看到了tuple,那就在写一次吧. tuple(元组),他的内部可以放任意类型的变量( ...

  10. PAT 列车厢调度   (25分)(栈和容器的简单应用)

    1 ====== <--移动方向 / 3 ===== \ 2 ====== -->移动方向 大家或许在某些数据结构教材上见到过“列车厢调度问题”(当然没见过也不要紧).今天,我们就来实际操 ...