data.table包使用应该注意的一些细节
fread中nThread 参数的使用
注意默认nThread=getDTthreads(),即使用所有能用的核心,但并不是核心用的越多越好,本人亲自测试的情况下,其实单核具有较强的性能,只有在数据大于3Gb的情况下,开启11核(我的机器全部核心30多核)效率才比一个核心更高,而默认使用全部的核心效率一直非常低。因此对于不是非常巨大的文件,建议设置为1,不要使用全部核心
fread中sep是自动检测的
所以在循环读入文件的过程中,就算不同文件的分隔符不同,也可以循环一次性方便的读入; 还有就算后续改变了文件的分隔符,文件也可以读入,建议不加分隔符
fread可以自动检测注释,并且跳过注释行
默认skip=0,会跳过不规则的行,因此有注释行时,可以走默认的skip参数
转换成矩阵时可以保留某一列为rowname
as.matrix作用于data.table时会调用as.matrix.data.table,有一个rownames参数可以指定保留为行名的列
矩阵转换成data.table时可以保留列名
在as.data.table函数中同样有一个rownames参数,设置为T可以将行名保留下来作为data.table的一列
不建议set和for循环一起使用
虽然set可以在内存上直接改变数值,但在R中用for循环比批量列运算慢的多,因此首选:=或者apply等
在处理浮点数时会有一些准确性的问题
比如用seq函数numeric类型的数值时,会存在不准确的问题,比如seq(0,1,by=0.2)中的0.6就不等于0.6, 虽然很费解,但这是因为计算机在存储浮点数时出现的一些问题。现在只发现seq函数会出现这种情况,manual中提供了一个函数解决这个问题,setNumericRounding(2) ,去除最后两个字节,这样运行的更快,也不会出现0.6不等于0.6的问题
支持数据框取交集和并集
类似于集合运算,data.table中fintersect, fsetdiff, funion,fsetequal函数能对不同数据框的行求交集,差集,并集等
可以直接对列按分隔符进行分割
应用tstrsplit函数可以将一列按照分隔符分成多列,函数返回的是一个列表,举例:DT[, c("c1", "c2") := tstrsplit(x, "/", fixed=TRUE)][],将x列按照/分隔,分割成c1,c2两列
支持类似于SQLs的分组运算
带有rollup, cube, groupingsets函数
参考资料
data.table 1.11.2 manual:https://cran.r-project.org/web/packages/data.table/data.table.pdf
data.table包使用应该注意的一些细节的更多相关文章
- R语言数据分析利器data.table包 —— 数据框结构处理精讲
R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代码简洁,只要一行命令就可以完成诸多任务,另一方面是处理 ...
- data.table包简介
data.table包主要特色是:设置keys.快速分组和滚得时序的快速合并.data.table主要通过二元检索法大大提高数据操作的效率,同时它也兼容适用于data.frame的向量检索法. req ...
- R︱高效数据操作——data.table包(实战心得、dplyr对比、key灵活用法、数据合并)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 由于业务中接触的数据量很大,于是不得不转战开始 ...
- 使用 data.table 包操作数据
在第一节中,我们回顾了许多用于操作数据框的内置函数.然后,了解了 sqldf 扩展包,它使得简单的数据查询和统计变得更简便.然而,两种方法都有各自的局限性.使用内置函数可能既繁琐又缓慢,而相对于各式各 ...
- R语言data.table包fread读取数据
R语言处理大规模数据速度不算快,通过安装其他包比如data.table可以提升读取处理速度. 案例,分别用read.csv和data.table包的fread函数读取一个1.67万行.230列的表格数 ...
- R语言数据分析利器data.table包—数据框结构处理精讲
R语言数据分析利器data.table包-数据框结构处理精讲 R语言data.table包是自带包data.frame的升级版,用于数据框格式数据的处理,最大的特点快.包括两个方面,一方面是写的快,代 ...
- data.table包
data.table 1.生成一个data.table对象 生成一个data.table对象,记为DT. library(data.table) :],V3=round(rnorm(),),V4=:) ...
- R读取大数据data.table包之fread
>library(data.table)>data=fread("10000000.txt")>Read 9999999 rows and 71 (of 71) ...
- R语言学习笔记(十七):data.table包中melt与dcast函数的使用
melt函数可以将宽数据转化为长数据 dcast函数可以将长数据转化为宽数据 > DT = fread("melt_default.csv") > DT family_ ...
随机推荐
- 【译】索引进阶(十一):SQL SERVER中的索引碎片【上篇】
原文链接:传送门. 第十章节我们分析了索引的内部结构.有了这些关于索引结构的知识,我们便可以分析索引碎片了:其产生的原因,如何防止,以及何时可以不去关注它们. 一些背景知识 / 复习 以下知识对于理解 ...
- C# 文件下载工具类FileDownHelper
using System; using System.IO; using System.Threading; using System.Web; namespace 落地页测试代码 { public ...
- linux shell脚本、命令学习
1,echo "test" > test.txt 输出重定向到text.txt,文件不存在就创建 echo "test" >> test ...
- MQTT初步使用
环境搭建 1.mosquitto所需要的rpm包 2.c-ares-1.12.0 3.安装最新的openssl版本 4.mosquitto-1.4.10 mosquitto需要的rpm包 c-ares ...
- Hadoop之Flume 记录
出现这个错误是自己的粗心大意,解决: 在配置flume-conf.properties文件时,source和channel的对应关系是: myAgentName.sources.mySourceNam ...
- ***OneinStack交互安装FAQ和管理服务常用命令
转自: https://oneinstack.com/install/ 自动生成oneinstack安装连接: https://oneinstack.com/auto/ (进入linux系统后复杂上 ...
- SoftEther
sudo apt-get update sudo wget http://www.softether-download.com/files/softether/v4.25-9656-rtm-201 ...
- 将已经存在的异步请求callback转换为同步promise
由于js是单线程执行,为防止阻塞,会有很多异步回调函数callback,嵌套层次多了,可读性就差了很多.随着社区的发展,出现了promise.我们来将一些常见的回调函数做修改,变成promise的链式 ...
- 为什么MySQL数据库要用B+树存储索引?
小史:树的话,无非就是前中后序遍历.二叉树.二叉搜索树.平衡二叉树,更高级一点的有红黑树.B 树.B+ 树,还有之前你教我的字典树. 红黑树 一听到红黑树,小史头都大了,开始抱怨了起来. 小史:红黑树 ...
- MSSql-1内部数据库版本号
源SQL Server版本 内部数据库版本 SQL Server 2017 869 SQL Server 2016 782 SQL Server 2012 706 SQL Server 2008 R2 ...