常用分隔符文件的读取函数'read_csv/read_csv2/read_tsv'分别对应于'utils'中的'read.csv/read.csv2/read.delim'。Hadley与其他成员开发的这个包更像是对'baseR'中与数据读取有关函数的一个优化,使其更加规范、稳定和可再现。表1-13中列出了readr_delim包参数的英文名称、功能的中文描述及部分传参注释。其中,比较重要的几个参数依次为'file'它们比较'delim'(如使用'read_csv'等则无须设置)、'skip'、'col_name'和'col_types'。之所以说它们比较重要,是因为笔者发现适当调整参数设置可以让后续的数据处理事半功倍。
表1-13 数据导入函数'read_delim'参数详解
参数'file'的重要性不言而喻,无默认值,必须设置。第二位参数'delim'视情况可有可无,在使用具体的子函数'read_csv/read_csv2/read_tsv'时就无须设置。不过使用母函数'read_delim'时是没有默认值的。
当一个.csv数据中前面有很多空白行时,skip参数可以直接跳过空白行来读取数据。具体设置非常简单,skip=3即表示跳过前三行数据,从第四行开始读取。这个参数并非只用于跳过空白行,也可以用来读取原始数据的一部分,配合n_max使用可以做到随心所欲地读取任一部分数据。
另外一个重要的参数是col_names。对原始数据中的变量名称不满意,可以使用该参数自定义变量名称。这个参数可以理解为将read.table中的参数header和col.names的功能融合在一起,相关内容请参见1.1.3节。
变量属性对后续计算会有很大影响,所以col_types参数的重要性也不容忽视。虽然Hadley等已经将这个参数的功能优化得非常智能了,但他还是会建议用户应尽量依据个人需求来定义变量属性,因为意外总是存在的。
下面的代码展示了read_csv解析变量属性正常、读取正常的情况。运行函数之后,报告会在console中显示每一列数据都被解析成了何种属性,因此非常容易甄别哪一列数据类型不是期望的类型。在某些特殊情况下,比如原始文件分隔符号不统一的情况,这时自动解析功能会无法识别某一列或多列变量的属性,进而显示parsing failures(剖析失败)的报告。用户可以通过problems函数来查看具体的信息,从而确定原始数据中的哪一部分数据出现问题。
> library(readr)> read_csv("RawData/flights.csv")## Parsed with column specification:## cols( ## carrier = col_character(),## flight = col_integer(),## tailnum = col_character(),## origin = col_character(),## dest = col_character(),## air_time = col_integer()## )