|手把手教你用R语言读取CSV文件
导读:R语言有许多种方法去获取数据 , 最常用的是读取CSV文件 。
作者:Jared P. Lander
来源:华章科技
本文插图
读取CSV文件最好的方法是使用read.table函数 , 许多人喜欢使用read.csv函数 , 该函数其实是封装的read.table函数 , 同时设置read.table函数的sep参数为逗号('','') 。 read.table函数返回的结果为data.frame 。
read.table函数的第一个参数为文件所在路径 , 可以是本地文件 , 也可以是网页上的文件 。 本书主要是从网页读取文件 。
任意CSV文件都可以读取 , 这里使用read.table函数读取一个简单的文件(地址如下):
http://www.jaredlander.com/data/TomatoFirst.csv
> theUrltomato 利用head命令 , 我们可以看到下面的结果 。 > head(tomato)
本文插图
如前面所述 , 第一个参数是文件名(或字符型变量) 。 注意我们如何显式地使用参数名file、head和sep 。 函数的参数能够按位置顺序赋值 , 而不用显式指定参数名 , 但指定参数名是最佳实践 。
第二个参数header , 表示数据的第一行 , 即列名 。 第三个参数sed , 表示数据的分隔符 。 可以设为“t”(tab分隔符)或者“;”(分号分隔符) , 以读取不同类型的文件 。
常用但不被熟知的参数是stringAsFactors 。 将该参数设为FALSE(默认是TRUE)可使字符所在列不被转换成factor列 。 这样既节省计算时间(当大数据集包含许多字符列 , 也意味着有许多唯一值) , 又能保留列为字符 。
stringAsFactors参数也可以用在data.frame中 。 再次创建“Sport”列 。
> xyqtheDFtheDF$Sport
本文插图
read.table函数还有许多参数 , 最常用的是quote和colClasses参数 , 分别设置字符的包围符和每列的数据类型 。
类似read.csv函数 , 也有其他用于read.table的封装函数 , 也有默认参数 。 它们主要的区别是sep和dec参数 。 详细情况见表6-1 。
本文插图
▲表6-1 读取大文本文件的函数及其默认参数
大文件使用read.table函数读取到内存比较慢 , 幸运的是有解决方案 。 读取大CSV文件和其他文本文件的两个主流的函数是read_delim和fread , 前者在readr包中由Hadley Wickham实现 , 后者在data.table包中由Matt Dowle实现 。 read_delim和fread运行相当快 , 因为两者都不把字符数据自动转换成factor 。
01 read_delim函数
readr包提供读取文本文件的一系列函数 。 最常用的是read_delim函数 , 读取有分隔符的文件 , 比如CSV文件 。 该函数的第一个参数是读取的文件路径或者URL 。 col_names默认为TRUE , 指定文件的第一行为列名 。
> library(readr) > theUrltomato2 read_delim函数执行后会打印列名和数据类型信息 , 这些信息也可以使用head.read_delim函数获得 。 readr包中的所有数据提取函数返回的是tibble , 该数据类型是data.frame的扩展 。 最明显的变化是打印的元数据 , 比如行列数和每列的数据类型 。 tibble会适应屏幕大小打印相应条数的行列数据 。 > tomato2
本文插图
read_delim函数不仅仅读取速度比read.table函数快 , 而且不需要设置stringAsFactors参数为FALSE 。 read_csv、read_csv2和read_tsv函数是read.table函数分隔符分别为逗号(,)、分号(;)和tab(t)的特殊情况 。
注意 , 数据读取为tbl_df对象 , 它是tbl的扩展 , 也是data.frame的扩展 。 tbl是data.frame的特殊类型 , 它在dplyr包中定义 。 每列的数据类型显示在列名的下面 , 这是个很好的功能 。
readr包有一些对read_delim函数封装(预置分隔符)的辅助函数 , 比如read_csv函数和read_tsv函数 。
02 fread函数
另一个读取大量数据的函数是data.table包的fread函数 。 第一个参数是读取的文件路径或者URL 。 header参数表示文件的第一行是列名 , sep指定分隔符 。 该函数的stringAsFactors参数默认设为FALSE 。
> library(data.table) > theUrltomato3 这里也可以使用head函数查看前几行数据:> head(tomato3)
本文插图
该函数读取速度比read.table函数快 , 结果为data.table对象 。 data.table对象是data.frame的扩展 , 其是data.frame的优化 。
read_delim或者fread函数读取文件都非常快 , 具体使用哪个函数取决于dplyr或者data.table包中哪个更适合数据处理 。
关于作者:贾里德 P. 兰德(Jared P. Lander) , 资深数据专家 , Lander Analytics公司创始人兼CEO , 纽约开放统计编程聚会负责人 , 哥伦比亚大学统计学兼职教授 。 在数据管理、多层次模型、机器学习、广义线性模型、可视化、数据管理和统计计算等多个领域拥有丰富经验 。
本文摘编自《R语言:实用数据分析和可视化技术》(原书第2版) , 经出版方授权发布 。
本文插图
延伸阅读《R语言:实用数据分析和可视化技术》
【|手把手教你用R语言读取CSV文件】推荐语:本书借鉴数据科学家Jared P. Lander在R语言上丰富的教学经验 , 通过大量实例 , 详细讲解R语言的核心功能 。 对于刚接触统计程序和模型的人 , 本书的内容组织结构使得学习R语言相当简单和直观 。 本书主要介绍R语言中20%的核心功能 , 但是这20%的功能足以让你解决80%的现代数据分析 。
推荐阅读
- 量化|量化大师麦教授:美好的不确定性
- 教你自制岩烧乳酪
- 教你做虎皮蛋糕上的虎皮,掌握2个技巧,保证起虎皮,做法很简单
- 不用油不用牛奶,教你做蜂蜜蛋糕,蒸或烤都可以,只需4种食材
- 春天来了教你几道好吃不油腻的家常菜,美味简单下饭,百吃不厌!
- 冬天到了,教你几道暖胃家常菜,营养健康,孩子营养不发愁!
- 春节过后请客吃饭教你几道美味特色的下酒菜,简单易学,味道超赞!
- 想吃点心不用买,教你在家做“驴打滚”,不用烤箱,软糯香甜!
- 家常炖老母鸡,不用炖3小时,教你一妙招,40分钟鸡肉软嫩入味
- 豆腐不要红烧了,教你做外脆里嫩的炸豆腐,家人吃到赞不绝口
