|手把手教你用R语言读取CSV文件


导读:R语言有许多种方法去获取数据 , 最常用的是读取CSV文件 。
作者:Jared P. Lander
来源:华章科技
|手把手教你用R语言读取CSV文件
本文插图

【|手把手教你用R语言读取CSV文件】读取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)|手把手教你用R语言读取CSV文件
本文插图

如前面所述 , 第一个参数是文件名(或字符型变量) 。 注意我们如何显式地使用参数名file、head和sep 。 函数的参数能够按位置顺序赋值 , 而不用显式指定参数名 , 但指定参数名是最佳实践 。
第二个参数header , 表示数据的第一行 , 即列名 。 第三个参数sed , 表示数据的分隔符 。 可以设为“t”(tab分隔符)或者“;”(分号分隔符) , 以读取不同类型的文件 。
常用但不被熟知的参数是stringAsFactors 。 将该参数设为FALSE(默认是TRUE)可使字符所在列不被转换成factor列 。 这样既节省计算时间(当大数据集包含许多字符列 , 也意味着有许多唯一值) , 又能保留列为字符 。
stringAsFactors参数也可以用在data.frame中 。 再次创建“Sport”列 。
> xyqtheDFtheDF$Sport
|手把手教你用R语言读取CSV文件
本文插图

read.table函数还有许多参数 , 最常用的是quote和colClasses参数 , 分别设置字符的包围符和每列的数据类型 。
类似read.csv函数 , 也有其他用于read.table的封装函数 , 也有默认参数 。 它们主要的区别是sep和dec参数 。 详细情况见表6-1 。
|手把手教你用R语言读取CSV文件
本文插图

▲表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|手把手教你用R语言读取CSV文件
本文插图

read_delim函数不仅仅读取速度比read.table函数快 , 而且不需要设置stringAsFactors参数为FALSE 。 read_csv、read_csv2和read_tsv函数是read.table函数分隔符分别为逗号(,)、分号(;)和tab(t)的特殊情况 。


推荐阅读