fread函数的用法 fread和fwrite的参数说明

2024-09-2601:02:10综合资讯0

导读:

无论你分析数据的目的是什么,将数据导入R语言环境中都是一个必不可少的步骤。毕竟,没有数据的分析就像没有原料的烹饪。

R语言中的utils包是基础包之一。尽管它主要的功能并不是数据导入,而是提供了许多编程和包开发中非常实用的工具函数。但即使我们在数据导入和初步探索中只使用了utils包的一小部分功能,这一点也足以让你在学习R语言时事半功倍。

作者:刘健 邬书豪

如需转载请联系华章科技

fread函数的用法 fread和fwrite的参数说明

01 read.csv/csv2:逗号分隔的数据读取

.csv文件可能是当前最为普遍的平面文件格式。它代表comma-separated values,即文件中的每个数据值用逗号分隔开。

.csv只是文本文件(text file)的一种,文本文件在Windows操作系统中通常以.txt为扩展名。文本文件可以用不同的符号分隔数据值,如tab和“;”(分号),甚至其他符号。即使是.csv扩展名的文件,也不一定是逗号分隔的,后文的函数示例将对此做详细介绍。

文件扩展名并不是绝对必要的,熟悉Linux系统的读者可能会遇到许多没有扩展名的文件。处理没有扩展名的文本文件时,data.table包中的fread函数是最简单的解决方案。

utils包中的read.csv/csv2函数专门用于读取逗号分隔(read.csv)或分号分隔(read.csv2)的数据文件。在了解数据分隔符的情况下,这两个函数的默认设置使得数据导入过程更加高效和便捷。

需要特别注意的是,这两个函数对小数点的处理方式有所不同:前者默认小数点为“.”,后者则为“,”。这主要是由于不同国家的技术人员对数据值分隔符的偏好不同。

开始我们先看read.csv的最简单使用方式,代码如下:

此行代码的作用是使用read.csv从工作空间中读取名为flights.csv的文件,然后将数据集保存到flights变量中,其他参数使用默认设置。因为flights.csv文件已经存在于R的工作目录中,所以无需设置工作路径。

推荐读者可以尝试使用.rproj(R项目—将每次数据分析视为独立项目)来管理每个数据分析工作。这不仅省去了设置路径的麻烦,还能减少因原始数据文件过多可能带来的问题。

小提示:函数执行时可以根据参数的位置来设定,不必指定每个参数的名称。例如,read.csv中的file参数可以省略,只需按顺序提供路径和文件名即可。

在数据文件被导入R环境后,通常会使用str函数对数据对象进行初步检查,下面的代码展示了该函数的基本用法。

str函数用于查看数据结构、变量名称等信息。示例代码中仅指定了一个非默认参数,其余参数均为默认设置。str的输出结果包括5个主要部分,具体如下:

data.frame表示数据集在R中的格式,即数据框格式,类似于Excel中的表格格式。

6 obs. of 6 variables表示数据集有6个变量,每个变量有6个观测值。

$ carrier等带有“$”符号的部分表示变量名称。

变量名称后的Factor和int表示变量的类型,分别为因子型和整数型。还有字符型chr、逻辑型logi、浮点型dbl(带小数点的数字)、复杂型complex等。因子型变量后列出了因子水平,例如,出发地origin的3 levels表示有3个因子水平。出发地是否为因子型数据还需要进一步确认,而read.csv默认将字符型数据读作因子型。

数据中的实际观测值。str函数默认显示10行数据。使用str函数可以帮助用户确定数据是否正确,是否存在默认值,以及变量的类型等,从而决定下一步的数据处理方向。其他用于检查数据集的函数包括head、tail、view等。RStudio中的Environment部分也可以查看当前工作环境中的数据框或其他数据集。

前面提到,.csv文件不一定是用逗号分隔。如果遇到非逗号分隔的数据,且没有指定分隔符(例如,使用read.csv读取Tab分隔的文件),可能会出现以下情况:

小技巧:指定符号“<-”的快捷键是“alt”加“-”(短划线)。可以通过“alt+K”查看Rstudio快捷键参考表。

如代码所示,read.csv函数会将所有数据读入到一列中,因为函数默认寻找逗号作为分隔符,若未找到则会将所有变量放在一列。通过指定分隔符参数可以解决这一问题。将\t(Tab在R中的表示方式)赋给sep参数后再次运行read.csv,代码如下:

根据实际情况,字符型数据有时会被当作因子处理,有时不会。如果使用read.csv默认的读取方式,将字符型数据全部因子化可能会给后续处理带来困扰。最好关闭字符因子化。stringsAsFactors参数就是用来控制这一点,示例代码如下:

fread函数的用法 fread和fwrite的参数说明

02 read.delim/delim2:特定分隔符的数据读取

read.delim和delim2函数专门用于读取以Tab分隔的数据文件,其中delim用于处理小数点为“.”的数据,而delim2处理小数点为“,”的数据。这两个函数与read.csv/csv2的主要区别在于参数sep = "\t"。

如果你尝试用这两个函数的默认设置来读取以逗号分隔的数据,函数会在数据中不断寻找Tab分隔符。如果找不到,结果将如前述,所有数据会被读入一列。read.delim/delim2的示例代码如下:

无论是read.csv还是read.delim,这四个函数(read.csv/read.csv2/read.delim/read.delim2)其实都是其母函数read.table的变体。可能因为在RStudio之前,read.csv/delim更易记忆,或者Henrik Bengtsson(utils包的作者)觉得这样更有趣。具体原因已不再重要,掌握这些函数才是关键。

03 read.table:任意分隔符的数据读取

read.table函数将文件读取为数据框格式,通过分隔符来区分不同变量,每行数据与相应的变量名称对齐。以下简要列出了read.table函数中主要参数的中英文对照:

read.table的常用参数及功能对照:

file:

数据文件路径及文件名,也可以是URL,或是文字数据

header:

设置逻辑值来指定是否将数据文件的第一行作为列名。默认为假

sep:

不同变量之间的分隔符,特指列数据的分隔符。默认值为空,可以是“,”、“\t”等

quote:

设置单双引号的规则。如果不设置此参数,可以将其指定为空:quote = ""

dec:

用作小数点的符号,通常为句点或逗号

row.names:

行名。可以通过向量设置。如果文件的第一行比数据列数少一,将默认使用第一列作为行名

col.names:

列名。可以通过向量设置列名

na.strings:

处理默认值

colClasses:

变量类型设置。通过向量指定每列的数据类型,具体使用方式为:colClasses = c("character","numeric",…)

fill:

设置逻辑值来处理缺失值,请参见代码演示部分

strip.white:

设置逻辑值来处理空白列。某些数据文件可能会预留一些列,但数据采集后这些列未被使用