在前面的章节中,我们已经学习了如何使用 reshape2 扩展包对 data.frame 进行
塑形。其实,data.table 扩展包为 data.table 对象提供了更快更强的 dcast( ) 函
数和 melt( ) 函数。
例如,将 toy_tests 的每个产品的质量得分按照年和月进行对齐:
toy_tests[, ym := substr(date, 1, 6)]
toy_quality <- dcast(toy_tests, ym ~ id, value.var = "quality")
toy_quality
## ym T01 T02
## 1: 201602 9 7
## 2: 201603 10 8
## 3: 201604 9 9
## 4: 201605 9 10
首先,我们使用 := 在 toy_tests 中直接创建了一个新列 ym,然后,使用 dcast( )
对 toy_tests 进行转换,这一步和前面 reshape2 的例子是一样的。结果看起来和在数
据框上使用 reshape2::dcast( ) 一样。
但是,reshape2::dcast( ) 不支持多个变量,而 data.table::dcast( ) 可以:
toy_tests2 <- dcast(toy_tests, ym ~ id, value.var = c("quality",
"durability"))
toy_tests2
## ym quality_T01 quality_T02 durability_T01 durability_T02
## 1: 201602 9 7 9 9
## 2: 201603 10 8 9 8
## 3: 201604 9 9 10 8
## 4: 201605 9 10 9 9
除了第 1 列以外,其他的列名都不再是 id 值,而是用下划线将变量名和 id 值连接起
来。此外,塑形公式 ym~id 左边的变量将被自动设置为结果 data.table 的键:
key(toy_tests2)
## [1] "ym"
这个键意味着我们可以通过提供一个 ym 的值,直接获得对应的记录。然而,下面的
代码会报错:
toy_tests2[.(201602)]
## Error in bmerge(i, x, leftcols, rightcols, io, xo, roll, rollends, nomatch, :
x.'ym' is a character column being joined to i.'V1' which is type 'double'.
Character columns must join to factor or character columns.
从错误信息来看,是因为数据的类型存在一些问题。因此,我们通过以下代码来查看
每一列的类:
sapply(toy_tests2, class)
## ym quality_T01 quality_T02 durability_T01
## "character" "integer" "integer" "integer"
## durability_T02
## "integer"
问题出在 ym 的类上。它是一个字符向量,但是我们提供了数值型的键。因为无法匹
配数据类型,所以搜索失败。如果我们提供一个字符串,便可得到对应的记录:
toy_tests2["201602"]
## ym quality_T01 quality_T02 durability_T01 durability_T02
## 1: 201602 9 7 9 9
但是,ym 是如何变成字符的呢?回顾一下,在 ym := substr(date, 1, 6)
中, date 是一个整数向量,但是,调用 substr( )函数时,先将 date 强制转换成字
符向量,再提取前 6 个字符。因此,结果是一个字符向量,至此,我们就很不会觉得那
么奇怪了。以下是简单的演示:
class(20160101)
## [1] "numeric"
class(substr(20160101, 1, 6))
## [1] "character"
这提醒我们,在进行数据操作时,对于键列的数据类型,需要小心一点。

重塑 data.table的更多相关文章

  1. 使用 data.table 包操作数据

    在第一节中,我们回顾了许多用于操作数据框的内置函数.然后,了解了 sqldf 扩展包,它使得简单的数据查询和统计变得更简便.然而,两种方法都有各自的局限性.使用内置函数可能既繁琐又缓慢,而相对于各式各 ...

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

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

  3. data.table包

    data.table 1.生成一个data.table对象 生成一个data.table对象,记为DT. library(data.table) :],V3=round(rnorm(),),V4=:) ...

  4. R之data.table速查手册

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

  5. 两种Data Table参数化设置的区别

    首先介绍Data Table的语法: 1.DataTable.value(ParameterID, SheetID) 2.DataTable(ParameterID, SheetID) 以上2种方法的 ...

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

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

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

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

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

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

  9. data.table包简介

    data.table包主要特色是:设置keys.快速分组和滚得时序的快速合并.data.table主要通过二元检索法大大提高数据操作的效率,同时它也兼容适用于data.frame的向量检索法. req ...

随机推荐

  1. CentOS oracle Client客户端安装

    CentOS客户端安装方法如下: 1.安装客户端 rpm -ivh /当前目录/oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm rpm - ...

  2. Android屏幕适配和文字屏幕适配

    http://blog.sina.com.cn/s/blog_9996c67e0101euwd.html 最近在一个项目中要实现屏幕适配平板和手机等不同的型号,而蛋疼的美工给了一套图,而且这些图纸有在 ...

  3. mysql常见的错误码

    Mysql错误代码 Mysql错误代码分为两部分,老版本一部分,4.1版本为新的部分 第一部分: mysql的出错代码表,根据mysql的头文件mysql/include/mysqld_error.h ...

  4. 'Settings' object has no attribute 'TEMPLATE_DEBUG' 的解决方法

    找到该Django项目下的settings文件,把 DEBUG = True 改为 DEBUG = False 就可以正常浏览显示了 参考:https://stackoverflow.com/ques ...

  5. SpringCloud 进阶之Hystrix(断路器)

    1. Hystrix 断路器 Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败, 比如超时,异常等,Hystrix能够保证在一个依赖出问题的情况 ...

  6. linux 的nohup & 和daemon 总结(转)

    add by zhj:守护进程貌似跟nohup + &方式启动的进程差不多.都可以实现与终端的无关联.   原文:http://blog.csdn.net/lovemdx/article/de ...

  7. day14(编码实战-用户登录注册)

    day14 案例:用户注册登录 要求:3层框架,使用验证码   功能分析 注册 登录   1.1 JSP页面 regist.jsp 注册表单:用户输入注册信息: 回显错误信息:当注册失败时,显示错误信 ...

  8. RSA与AES的区别

    RSA 非对称加密,公钥加密,私钥解密,反之亦然.由于需要大数的乘幂求模等算法,运行速度慢,不易于硬件实现. 通常私钥长度有512bit,1024bit,2048bit,4096bit,长度越长,越安 ...

  9. Mirror--镜像相关错误

    场景: 同一局域网下搭建了镜像的服务器上报以下错误日志: An error occurred in a Service Broker/Database Mirroring transport conn ...

  10. Atom飞行手册翻译

    https://www.w3cschool.cn/atomflightmanualzhcn/