相关文章推荐

第4章 文本数据

文本数据四处可见,例如程序运行日志文件,或博客文章、微博等。数值型的数据我们拿来可以开始做计算,但文本数据必须要先经过处理才能进行分析。本章我们先介绍一些基本的文本操作,然后专攻文本处理的必备利器:正则表达式。

在我们介绍正式内容之前,先强调一个至关重要的问题,就是文本编码。在计算机中,文本可以以不同的编码存储,这事儿主要是Windows惹的祸,给程序员带来了无尽的苦恼。在Linux世界,默认编码通常就是通用的UTF8,所以我们处理文本几乎从来不必考虑编码问题。Windows下的默认文本编码通常是各种“方言”,比如中文用一种编码方式(GB2312),韩文用另一种方式,等等。这样我们要读取一个文本文件或处理一段文本数据,就必须先了解它的编码方式,在很多R函数中都有一个 encoding 参数,就是为了对付这种情况的,例如 readLines() 。为了世界的和平和人民的安定,我们大力呼吁所有人都统一使用UTF8编码,让所有程序都能够自由对话。稍微好用一点的文本编辑器都支持设定编码,例如Windows下的Notepad++,我们存储文件尽量用UTF8编码。

4.1 基本操作

在R中读入一个文本文件可以用 readLines() 函数,它返回一个字符型向量,文件中每一行都是向量中对应的一个元素。这个文件可以是本地文件,也可以是一个网址。例如:

https://github.com/rbind/yihui.name ,这事儿其实已经有人做了,不过请不要偷看答案。

文本数据当然不能只用来数一下有多少字符,这信息太粗糙了,我们还需要深入文本里面看内容。文本最常见的特征大概就是分隔符,它把文本的组成单元分开,典型的就是英文中的空格和标点,它们用来分开单词。实际上很多数值型数据在存储时也有同样的特征,例如CSV文件就是用逗号分开数据中的列,读入数据的时候我们就知道,当遇到一个逗号时就意味着开始新的一列了。为了深刻理解这种“分隔”的特征,请存一个CSV文件并用文本编辑器打开它:

http://cos.name/cn/topic/104126/ ,其实是个没事找抽的例子,但可以说明字符集的基本用法。我们的任务是从几行字符串中提取R包的名字(包名由所有大小写字母、数字和点构成),先上代码:

 
推荐文章