R0—New packages for reading data into R — fast

小伙伴儿们有福啦,2015年4月10日,Hadley Wickham大牛(开发了著名的ggplots包和plyr包等)和RStudio小组又出新作啦,新作品readr包和readxl包分别用于R读取text数据和Excel电子表格数据。事实上,R已经有了一堆读取数据的函数,比如read.table家族以及其巨多的变形,那么为了牛牛们为什么还要开发这两个包呢?原因很简单,这两个包的读取速度比R内置数据读入函数更快!!!记住哦,是快很多哈!不信,我们下来试试就知道啦!哈哈!平时读取小数据的童鞋可能不会有感觉,但读入的数据量比较大时,速度快就是一个很突出的优势啊,有木有?!废话不多说,上菜!
1)readr包示例
readr包提供了几个用R读取表格/文本数据的函数,并增添了额外的功能,而且更快!这在之间通常是用read.table家族函数来完成这些使命,现在可以轻松很多了啊!
首先,来看看readr包中第一个牛逼轰轰的函数read_table,它替换了之前read.table的功能,关键是更快,请记住,快、速度是这个包诞生的重要原因,可能是受大数据时代这股趋势的推动!我们来做一个实验!让这两个函数同时读取一个包含了4百万航数据的文件(数据地址:http://academic.udayton.edu/kissock/http/Weather/gsod95-current/NYNEWYOR.txt ),看看有什么有趣的发现!
Step1
看看数据格式,可以看到有四列,分别代表日,月,年和一个数值

Step2
打开R,运行以下命令,看看两个命令的运行时间!
> system.time(read_table(file = 'http://academic.udayton.edu/kissock/http/Weather/gsod95-current/NYNEWYOR.txt',col_names = c('DAY','MONTH','YEAR','TEMP')))
用户 系统 流逝
3.30 11.06 14.43
> system.time(read.table(file = 'http://academic.udayton.edu/kissock/http/Weather/gsod95-current/NYNEWYOR.txt',col.names = c('DAY','MONTH','YEAR','TEMP')))
用户 系统 流逝
1.92 1.62 96.10
这两个命令看起来类似,但是read.table函数大约花费了96.1秒完成,而read_table再不到15秒就完成啦(这可能是我这台破电脑的原因,官方的说法是:前者花了30秒左右,而后者不到一秒就搞定啦!!擦….这性能…无法比啊!)。也许有人会问,为什么会这样呢?原因在于:read_table函数把数据当成一个固定格式的稳健,底层使用C++快速的处理数据(与之对比的是,read.table支持列间任意数量的空格,而read_table要求每一列都排的很整齐,即一列中不能有"出头鸟")。但是,话是这么说,实际运用时,并没有这样严格的限制!
R基本包中有一个读取固定宽度数据集的函数,请看下面,再次见证readr包的神奇,对!!!就是这么神奇!!!
> system.time(dat <- read_fwf('http://academic.udayton.edu/kissock/http/Weather/gsod95-current/NYNEWYOR.txt',
+ fwf_widths(c(3,15,16,12),
+ col_names=c("DAY","MONTH","YEAR","TEMP"))))
用户 系统 流逝
0.67 1.70 2.40
> system.time(dat2 <- read.fwf('http://academic.udayton.edu/kissock/http/Weather/gsod95-current/NYNEWYOR.txt', c(3,15,16,12),
+ col.names=c("DAY","MONTH","YEAR","TEMP")))
用户 系统 流逝
0.73 0.49 89.03
看吧,这一对比,知道readr包的腻害了吧!
当然,上面只是readr包中一个简单的例子!readr中包括的其他函数还有:
readr::read_csv Read a delimited file into a data frame.
readr::read_file Read a file into a string.
readr::fwf_empty Read a fixed width file.
readr::read_lines Read lines from a file or string.
readr::read_log Read common/combined log file.
readr::read_table Read text file where columns are separated by whitespace.
2)readxl包示例
对于Excel格式的数据,对应了这里的readxl包,这个包提供了读取后缀为.xls和.xlsx格式的Excel表格。
需要注意地是,readxl包是托管在https://github.com/hadley/readxl 上的,因此,安装的时候安装地址要指定是github上的readxl库!
> library(devtools) #先安装这个包,可以快速的完成readxl包的安装!!!
> library(devtools)
> devtools::install_github("hadley/readxl")
目前,readxl包提供的函数只有read_excel,格式如下
Read_excel(spreadsheet, sheet=1, na,…. )
使用方法一看便知,这里就不再啰嗦啦!感兴趣的小伙伴儿赶紧去亲自探索吧!!!

R0—New packages for reading data into R — fast的更多相关文章
- Importing data in R 1
目录 Importing data in R 学习笔记1 flat files:CSV txt文件 packages:readr read_csv() read_tsv read_delim() da ...
- 【MySQL】MySQL同步报错-> Last_IO_Error: Got fatal error 1236 from master when reading data from binary log
这个报错网上搜索了一下,大部分是由于MySQL意外关闭或强制重启造成的binlog文件事务点读取异常造成的主从同步报错 Last_IO_Error: Got fatal error 1236 from ...
- mysql 主从 Got fatal error 1236 from master when reading data from binary log: 'Could not find first 错误
本地MySQL环境,是两台MySQL做M-M复制.今天发现错误信息: mysql 5.5.28-log> show slave status\G ************************ ...
- Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary lo
mysql> show slave status\G *************************** 1. row *************************** ...
- SQL data reader reading data performance test
/*Author: Jiangong SUN*/ As I've manipulated a lot of data using SQL data reader in recent project. ...
- OpenTSDB-Querying or Reading Data
Querying or Reading Data OpenTSDB offers a number of means to extract data such as CLI tools, an HTT ...
- Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'系列一:
从库报这个错误:Got fatal error 1236 from master when reading data from binary log: 'Could not find first lo ...
- mysql从库Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'报错处理
年后回来查看mysql运行状况与备份情况,登录mysql从库查看主从同步状态 mysql> show slave status\G; *************************** . ...
- (转) 6 ways of mean-centering data in R
6 ways of mean-centering data in R 怎么scale我们的数据? 还是要看我们自己数据的特征. 如何找到我们数据的中心? Cluster analysis with K ...
随机推荐
- 《IT小小鸟》的阅读心得
新年过后我们迎来大一下学期,想想刚迈入大学的我们,充满着好奇与兴奋,仿佛就在昨天.时光飞逝而今,虽经过一学期的学习,仍对计算机专业充满困惑,对未来充满迷茫. 在我感到迷茫的时候,老师给我们介绍了这样的 ...
- 软工网络15团队作业4-DAY2
每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 张陈东芳:查看数据库的连接 吴敏烽:规范商品实体类 周汉麟:研究获取商品信息的方法 林振斌:研究获取商 ...
- 2nd 燃尽图
燃尽图(burn down chart) 在项目完成之前,对需要完成的工作所作的一种可视化表示.燃尽图主要用于向项目组成员和用户提供一个工作进展的公共视图,用以描述项目的实现状态.一般来说,常常用于形 ...
- C++变量内存分配及类型修饰符
前言 了解C++程序内存分配,有助于深刻理解变量的初始化值以及其生存周期.另外,变量类型修饰符也会影响到变量的初始化值及其生存周期.掌握了不同类型变量的初始化值及其生存周期,能够让我们设计程序时定义变 ...
- application/x-www-form-urlencoded 与 application/json区别
两种请求方式对服务器端都没什么影响 application/x-www-form-urlencoded方式是比较老的一种方式,这种方式的好处就是浏览器都支持, 在请求发送过程中会对数据进行序列化处理, ...
- Git(未完待续)
Git的历史咱们就不多说来,我还是喜欢直白点,直接来干货吧 在Linux上安装Git 不同的系统不同的安装命令,基础的就不说来,centos直接yum就ok. 安装完成后,还需要最后一步设置,在命令行 ...
- Contest 8
A:做法应该很多,比较好想的是每个点都往上倍增找到其能更新到的点. #include<iostream> #include<cstdio> #include<cstdli ...
- Notepad++查找和替换空行/空格/换行
Notepad++查找和替换支持正则表达式,功能很强大,但比较复杂因此暂不研究 Notepad++使用正则表达式查找,首先需要勾选查找/替换窗口左下部的“正则表达式(E)”\r\n表示换行,其中\r表 ...
- sql语句查询各门课程平均分的最大值
解法一: select courseno,stuno,avg(score) '平均分最高值'--这里是求平均,后面的条件是过滤最大值的 from tablename group by courseno ...
- VK Cup 2017 Round 3 + Codeforces Round #412
A 读题题 B 就是你排名第p,得了x分,而最终至少需要y分,你需要最少的successful hack,使得最终得分s>=y,且由s随机取25个数,使p被选中. (1)暴力枚举hack成功几次 ...