看完了《R语言实战》的第一章和第二章,也听了猴子的知乎live,接下来记录一下这部分的学习感受。
首先是安装R和Rstudio,之前分不清楚这两者的区别,在没有装Rstudio时敲了一下代码,今天装了Rstudio之后又试了一下,体验确实不一样,就像飞信和微信的区别。
第一章简单介绍了R,包括如何安装软件和什么是包,还有一些示例。
第二章主要包括数据结构和数据输入,其中数据结构包括如何定义不同的对象类型和如何使用这些数据,而数据的输入介绍了各种不同类型数据文件的导入。
R包含许多用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表,如图1所示。
上述对象类型在书中都讲得很清楚了,但更为关键的在于如何灵活地使用。
首先是要记住各个对象类型对应的函数,比如向量为c(),数据框为data.frame();其次要知道括号里面应该填入什么,比如数据框中不同的列向量可以为不同的类型,但同一列只能为一种类型(字符型、数值型或逻辑型中的一种);最后就是括号中的参数,还有其他的相关函数了,这些可能都需要多接触多实践,才可能记得住,用得来。
接下来是我的实践,读取猴子提供的病例excel数据,并使用合适的数据结构对这些数据进行存储,完成简单的数据分析。我采用了三种方式:手动输入数据,csv文件导入,还有excel表格导入。
a. 手动输入数据。
跟着猴子的代码打了一遍,跟上思路。
首先是要有行row和列col的概念,在头脑中想象一下你要创建的这个列表每一行是什么,每一列又是什么。在数据框中,列表示变量,行表示观测。
然后是把每一列定义为一个向量,需要用到c()函数,只有把每个向量取好了名字,之后才能调用,注意名字不要取重复了,注意()中的数据必须是同一个类型:即数值型,字符型或逻辑型。
在图2代码中可以看到,病人编号和年龄都是数值型,不需要加引号,姓名name中的数据为字符型,加单引号,糖尿病类型和病情中的数据为字符型,加双引号。
关于这里的单引号和双引号,对于定义字符型变量来说是没有影响的,我修改之后运行结果是一样的。
区别在于单引号和双引号本身作为字符的时候,注意要加\转义符,详细情况参见:
https://www.zhihu.com/question/23076362。
接下来是查找数据,简单的统计,还有如何增加一个新的病人的信息到已有的表中,会用到函数rbind()和cbind()。
最后就是运行程序,在console中得到最终的数据表格结果,如图3所示。处女座的我觉得没太对齐,但暂时还没研究如何处理。
b. csv文件导入。
首先需要把excel文件另存为csv文件。
代码比较简单(见图4),用到read.table()函数,具体用法参见《R语言实战》2.3.2。
需要注意的是,文件位置,Windows中默认的是“\”,与R中的“/”相反,我的做法是把地址复制过来后修改,不知道有没有更好的办法?看到另一个办法,那就是把“\”改为“\\”。
接下来看看结果,见图5。
注意到,姓名,年龄等都是Factor因子,因为read.table()函数默认把字符变量转变为因子。要改变这个情况,可以加入stringsAsFactors = FALSE,结果如下:
c. 导入excel数据
与csv的导入类似,不一样的地方在于:
1 要安装几个包:xlsx,xlsxjars,rJava。遇到问题:rJava无法载入,原因是需要下载64位的JRE安装才可使用。(出现以上错误的原因是你的Java版本是32位的,而你的R是64位的,因此,请下载64位版本的JRE,并且将环境变量JAVA_HOME换为64位JRE的位置,JRE可以在官网下载:http://www.java.com/en/download/manual.jsp)
2 加载xlsx包。
3 若是出现乱码(可能是中文的问题),则加入代码:encoding='UTF-8'。(参考例子:
http://blog.csdn.net/cheyennelam/article/details/56488622)
代码如下:
乱码结果如下:
正确结果如下:
需要阅读的书籍和文章
《数据结构算法》,《 中国人工智能的未来之路》,《RStudio使用指南》。
遇到并解决的问题
1 在R中,安装包的时候,library文件夹无法写入,退出R,管理员身份运行即可。
2 老生常谈的问题:逗号",",分号“;”,双引号“”和单引号‘’,$和&一定不要搞混了(查找数据的时候),但这很难避免,切换输入法(由于要输入中文)并不是每一次都可以做对的。R语言实战也讲过,参见P15:R语言编程中的常见错误。