且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《数据科学:R语言实现》——2.4 扫描文本文件

更新时间:2022-10-03 13:22:22

本节书摘来自华章计算机《数据科学:R语言实现》一书中的第2章,第2.4节,作者 丘祐玮(David Chiu),更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.4 扫描文本文件

在之前的教程中,我们介绍了如何使用read.table和read.csv加载数据到R进程中。然而,read.table和read.csv只适用于列数固定,数据不多的情形。为了在数据处理过程中更加灵活,我们会介绍如何使用函数scan从文件中读取数据。

准备工作

在本教程中,你需要完成之前的教程,并下载snp500.csv到当前目录。

实现步骤

执行下列步骤,扫描CSV文件中的数据。

1.首先,你可以使用函数scan读取snp500.csv中的数据:
《数据科学:R语言实现》——2.4 扫描文本文件

2.然后使用mode和str查看加载的数据:

《数据科学:R语言实现》——2.4 扫描文本文件

运行原理

与read.table和read.csv相比,函数scan更加灵活,数据读取也更加高效。这里,我们在what参数中,以列表的形式指定字段名和每个字段的支持类型。在这个例子中,第1个字段是字符类型,其他字段都是数值类型。因此,我们可以给Date列设定两个单(或双)引号,给其他列设定为0。然后,因为我们需要忽略列名行,并自动给字段数少于列数的任何一行添加空字段,我们可以设定skip为1,fill为True。

现在,我们可以使用内置的函数查看数据。这里,我们使用mode获取对象的类型,使用str展示数据的结构。

更多技能

某些情况下,数据是通过固定宽度分隔,而不是通过固定分隔符分隔的。为了指定每一列的宽度,你可以使用函数read.fwf。

1.首先,你可以使用download.file从作者的GitHub网页上下载weather.op:
《数据科学:R语言实现》——2.4 扫描文本文件

2.然后,使用文件编辑器查看数据,如图5所示。

《数据科学:R语言实现》——2.4 扫描文本文件

3.通过在widths中指定每列的宽度,在col.names中指定列名,设定skip为1跳过第一行,读取数据:
《数据科学:R语言实现》——2.4 扫描文本文件

4.最后,你可以使用函数head和names查看数据:
《数据科学:R语言实现》——2.4 扫描文本文件