快到碗里来(1)!
hello,大家好,我是Leopard!
千古江山,英雄无觅、孙仲谋处。舞榭歌台,风流总被雨打风吹去。斜阳草树,寻常巷陌,人道寄奴曾住。想当年,金戈铁马,气吞万里如虎!
好一个气吞万里如虎!R语言在数据科学界,也是气吞万里如虎般的存在着,这个吞,当然指的是吞各种各样格式的数据了。今天,我将带领大家进入R语言数据工作流的第一个阵营——数据的读取!
巧妇难为无米之炊,纵然你有上了天,能与太阳肩并肩的统计方法,纵然你有炫酷Diao炸天的数据可视化技术,可是没有数据,你说个篮子!没有数据,后面的一切都是纸上谈兵,都是空中楼阁,都是纸老虎!
当然,我在前面的内容中介绍过如何生成一个数值向量,如何新建一个数据框等等,我也告诉大家,R语言中有许许多多的内置数据集,这自然也是数据,只不过它不是我们自己的数据。当我们拿到我们自己的数据后,它或许住在Excel中,也或许是住在SPSS或者SAS之类的统计软件中,又或许是住在txt文本中,或者干脆它就是一个纯文本!无论如何,数据分析的首要任务就是把它们弄进R语言里面来。
在接下来的三期或者四期内容中,我会循序渐进的给大家介绍各种数据的读取方法,希望大家打起精神来,如果这个都没法吸引你的注意力,要么你就是个行家,你都会了,要么,你就是不想学R,在你眼里,它还不够sexy!
好,闲话少叙,首先我给大家介绍一下控制台的数据输入和输出。
scan()函数,扫描之意,咋一看,它跟创建向量没啥区别,但是还是有那么一点儿区别的,当你键入scan()函数后,你的控制台就处于数据输入状态,并且每个数据前面都有其相应的序号,输入完成,即按下enter键,继续下一个数值的输入,当所有数据全部输完之后,连续按两下enter键,即表示完毕,此时,一个最基本的数据就已经创建完毕了(尽管这不是严格意义上的读取)。
关于scan(),只介绍这么多,它就值这么多。
下面我们介绍如何从外部文件中(即从你的电脑硬盘中)读取一个数据。关于数据,我想你应该对它有个最起码的了解,包括它是什么类型的数据,是txt还是csv还是xls或者spss等等,这个可以通过查看文件的后缀进行了解;其次,你得知道它在哪里,即它的完整路径是什么,这个可以通过查看文件的属性了解;再者,你需要知道你的数据,是否包含中文,数据中的变量名是否合法(关于变量命名的规则请翻看前面的文章,具体哪一期我也忘了……);最后,你需要知道你的数据有多大,是kb级,mb级,还是达到了gb级。总而言之,知己知彼,百战不殆。
OK,下面我们来看看两种最常见的情况,即读取txt文件和csv文件。先小小的科普一下,在计算机语言中,txt文件被称为制表分隔符文件,csv文件被称为逗号分隔符文件。因为这两种格式,在包含相同数量的数据的情况下,其形成的文件更小,所以更加有利于数据的传输与分享,因此也是R语言中经常使用的两种数据格式。我个人非常崇尚csv格式。
read.table()函数是专门用来读取txt文件的函数,其第一个参数是数据文件的完整路径。关于路径有一点非常值得注意,那就是关于路径的写法,首先,路径必须是个字符串,即一定要包含在引号当中;其次,在Windows系统中,上下级文件之间可以使用“/”,或者使用“\”,至于是什么原因,我们在介绍正则表达式的是时候再讲,大家先记住。在MACOS中,则只能使用“/”,“\”在MAC中不管用!最后,文件的后缀不能丢!
read.table()有很多参数,但是使用频率最高的就是header,这是一个逻辑参数,当设置为TRUE时,则表示希望把文件中的第一行作为我们的变量名,该参数默认是FALSE,所以,如果你的数据第一行是列名,那就需要把header设置成TRUE;还有一个参数stringsAsFactors,这个参数不知你是否还有印象,它也是一个逻辑参数,设置为TRUE时,则表示将字符串转成因子。除了这两个参数,我个人认为还有两个参数需要介绍一下,其一是na.strings,其二是skip。
很多时候,我们的原始数据中总会遇到缺失值,在R语言中,缺失值统一以NA表示,但是,这不能保证我们的原始数据中的缺失值都是NA呀,有人喜欢留空格,有人喜欢用点,有人喜欢用短横杠表示,有人喜欢用999(没感冒,这不是打广告哈!),总之不同的人有不同的喜好,而为了让R语言认识它是一个缺失值,就需要调用na.strings参数了。
我把之前读入的iris数据集做了一些小小的改变,即添加了几个形式各样的缺失值(这很明显是一种作死的方式,实际工作中,你可千万不要这样子给自己挖坑!),按照正常方式读入时,仅有NA被识别成缺失值了,而点,短横杠,999均没有被识别。所以,我们再读入一次。
在na.strings参数中,我将数据集中几种缺失值的形式都添加进去了,这就等于告诉R,这些家伙都是披着羊皮的狼,都是缺失值,不能被他们蒙蔽了。
参数skip表示跳过的意思,即表示当你不想要前面n行数据时,可以使用该参数,比如:
此处我们就把iris的前五行给跳过了,直接从第六行开始读,但是有一个问题,那就是,变量名变成了数据集中第五行的数据。所以,变量名需要改变。
以上是txt文件的读取,那么csv文件的读取,与之非常类似。csv文件与excel文件长得一模一样,如果该数据是excel的xls或者xlsx格式,在导入之前则需要在excel中将其另存为csv格式的文件,再读入R中。
我们使用readcsv()函数读取csv文件,其参数,与read.table()一样。
OK,本期的内容就是这些,下期依旧是数据的读取!seeyou~
PS:需要查找往期R语言教程,可点击公众号下端的“精品专题”进入哦~
医学方也已推出了“R语言快速入门”以及“R语言可视化”的视频教程。可扫描以下二维码进入:
https://medfun.ke.qq.com
http://study.163.com/u/ykt1467466791112