《R语言与商业智能》读书笔记
学习《R语言与商业智能》 ,为了加深记忆,边读边做笔记。如有侵权,立即删除。
第 1 章 R简介
R是用于统计分析、统计绘图的语言和操作环境,是属于GNU系统的一个自由、免费、源代码开放的软件,也是一个用于统计计算和统计制图的优秀工具。
R的功能
R是一套完整的数据处理、计算和制图软件系统。其功能包括:数据存储和处理系统、数组运算工具(在向量、矩阵运算方面的功能尤其强大)、完整连贯的统计分析工具、优秀的统计制图功能、简便而强大的编程语言、可操纵数据的输入和输出,可实现分支、循环、用户可自定义功能。 与其说R是一种统计软件,还不如说R是一种数学计算的环境,因为R并不是仅仅提供若干统计程序,使用者只需指定数据来源和若干参数便可进行统计分析。R的思想是:它可以提供一些集成的统计工具,但更大量的是它提供各种数学计算、统计计算的函数,从而使使用者能灵活机动地进行数据分析,甚至创造出符合需要的新的统计计算方法。
R语言的语法表面上类似C,但在语义上是函数设计语言(functional programming language)的变种,并且和Lisp以及APL有很强的兼容性。特别的是,它允许在“语言上计算”(computing on the language)。这使得它可以把表达式作为函数的输入参数,而这种做法对统计模拟和绘图非常有用。
CRAN 和 Bioconductor
CRAN为 Comprehensive R Archive Network(R综合典藏网)的简称。它除了收藏了R可执行文件、源代码和说明文件,也收录了用户撰写的各种软件包。
R的缺点
- R是一种解释性语言,和编译语言相比,速度显得略慢一点,但是随着硬件和R自身的发展,这个问题已经慢慢消失了。
- R所有的计算都是在内存中进行的。
- 由于R语言的自由,各种包的编写者来自不同的领域,所以在一定程度上是比较混乱的,没有统一的命名格式,参数格式不一,源代码和文档质量良莠不齐。
R的使用
第一次使用R
在R中可以使用“=”,也可是使用“<-”来赋值,在实际使用中,这两种方法几乎没有区别。但是,一般在赋值的时候使用箭头,在传递参数的时候使用等号(必须使用等号,虽然有的时候用箭头也可以运行,但是很危险)。
1
2
3
4
5
6> x<-1:10
> x
[1] 1 2 3 4 5 6 7 8 9 10
> y=1:10
> y
[1] 1 2 3 4 5 6 7 8 9 10
获取帮助
1 | #查看函数的帮助 |
工作空间和工作目录
R是在内存中运行的,所使用的数据和函数等都在内存中,这被称为之为工作空间。可以使用ls()来列出当前工作空间中的多有对象,使用rm()来删除工作空间中的某一个对象,特别地,可以使用rm(list=ls(all.names=T))来删除所有的对象,包括其中隐藏的对象。
另外一个概念是工作目录,工作目录是一个文件夹的路径,这个路径表示的是当前在哪一个文件夹下工作。在存取文件时,如果不指定路径的话,就会默认为这个文件夹。在R中,可以使用getwd(即get work directory)函数来获得当前目录,如果要改变当前工作目录,可以使用setwd函数来设置。
包的安装和使用
在R中使用命令来安装包 1
2
3
4
5
6# 在R中使用命令来安装包
install.packages("安装的包名",dependencies=TRUE)
# 加载一个包
library("包名")
# 查看一个包的使用说明
library(help="包名")
第 2 章 数据结构
数据结构
向量
向量是用来储存一维数据的,其中的数据必须具有相同的数据类型,比如都是整数或者都是字符。可以用c()来创建向量。
1
2
3> v.number<-c(1,2,3,4,5,6)
> v.char<-c("Jane","Justin","Tom")
> v.bool<-c(TRUE,FALSE,FALSE)
1 | > if(-1) print("true") #-1为真 |
在R中,如果在一个向量中有两种不同的数据类型,那么数据之间会进行转化,转化的顺序为由低级向高级转换,数据类型的的高低级顺序为”NULL<raw<integer<double<complex<character<list<expression”。
1 | > x<-c(1:10,"Jane") |
可以通过方括号来访问向量中的元素,注意,在R中,向量的下标是从1开始的,而不是0。
1
2
3
4
5
6
7
8
9
10
11
12> x<-c(1:10)
> x[0] #x[0]返回的是一个和x类型相同的空对象
integer(0)
>
> x[1] #取出第1个元素
[1] 1
> x[2:4] #取出第2到第4个元素
[1] 2 3 4
> x[-1] #取出除了第1个以外的元素
[1] 2 3 4 5 6 7 8 9 10
> x[11] #返回NA值,注意和x[0]的不同
[1] NA
注意:在给变量命名的时候,需要符合一定的规则,必须是以字母或者“.”开头,并且“.”开头的名字后的第一个字符只能是下划线(“_”)或者字母。想要规范R语言命名和编程规范,推荐Google的R语言编程风格指南(Google’s R Style Guide)。
矩阵
矩阵是一个二维数组,和向量一样,在创建它的时候,也需要注意其数据应该具有相同的数据类型,可以使用函数matrix来创建,matrix的使用方法为:
1
matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23> rowName<-paste("row",1:3,sep='') #创建行名
> colName<-paste("col",1:4,sep='') #创建列名
> (m1<-matrix(data=1:12,nrow=3,byrow=TRUE,dimnames=list(rowName,colName)))
col1 col2 col3 col4
row1 1 2 3 4
row2 5 6 7 8
row3 9 10 11 12
>
> (m2<-matrix(data=1:12,nrow=3,byrow=FALSE,dimnames = list(rowName,colName)))
col1 col2 col3 col4
row1 1 4 7 10
row2 2 5 8 11
row3 3 6 9 12
> m1[1,2]
[1] 2
> m1[1,2:4]
col2 col3 col4
2 3 4
> m1[,1]
row1 row2 row3
1 5 9
> m1[3] #等价于m1[3,1]
[1] 9
数组
数组可以看成是矩阵的一个扩展,矩阵的维度只能是2,而数组的维度则可以更高,仍然要注意,数组数据的类型也要相同。可以通过函数array来创建数组,array函数的一般使用方法为:
1
array(data = NA,dim = length(data),dimnames = NULL)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34> dim1Name<-paste("A",1:3,sep='')
> dim2Name<-paste("B",1:4,sep='')
> dim3Name<-paste("C",1:2,sep='')
> (a<-array(1:24,dim=c(3,4,2),dimnames=list(dim1Name,dim2Name,dim3Name)))
, , C1
B1 B2 B3 B4
A1 1 4 7 10
A2 2 5 8 11
A3 3 6 9 12
, , C2
B1 B2 B3 B4
A1 13 16 19 22
A2 14 17 20 23
A3 15 18 21 24
> a[1,1,1]
[1] 1
> a[1,2,]
C1 C2
4 16
> a[1,,]
C1 C2
B1 1 13
B2 4 16
B3 7 19
B4 10 22
> a[,1,]
C1 C2
A1 1 13
A2 2 14
A3 3 151
2factor(x = character(), levels,labels = levels, exclude = NA,ordered = is.ordered(x),nmax = NA)
levels(x)
列表
list是一个强大的容器,可以在其中放入各种类型的的变量,比如数字、字符、向量、矩阵、数组以及数据框,甚至是列表本身。
1
list(x1,x2,x3,...)
数据框
数据框并不要求存储在其中的所有的数据类型都一样,但对于每一列的数据类型还是要求一样的。可以使用data.frame()创建数据框。
1
data.frame(...,row.names = NULL, check.rows = FALSE, check.names = TRUE, stringsAsFactors = default.stringsAsFactors())
1
2
3
4
5
6m1 <- matrix(0)
m2 <- matrix(0)
edit(m1)
fix(m2)
x<-scan()
y <- scan(what=list(name="",age=0)) # what指出输入的数据格式,可以通过给变量赋值的方式指明数据的格式。1
(x<-read.table(file = "D:/data.txt",head = TRUE,sep = ",",colClasses = c("character","factor","numeric","numeric")))
总结和补充
补充
class函数可以用来查看R中对象的类型。 1
2x <- 1:10
class(x)1
rep(x,times,each,length.out,...)
使用gl函数创建因子型。 1
2# 创建一个3水平的每个水平重复2次的因子序列
gl(n=3,k=2,labels=c("R","Python","Lisp"))
cbind 函数和 rbind 函数是用来合并数据集的,cbind 表示的是按列,而
rbind 表示的是按行合并。 1
2cbind(..., deparse.level=1)
rbind(..., deparse.level=1)1
2
3
4rbind(1:4, c=2,"aa"=10,a,deparse.level = 0) # 中间两行有标签
rbind(1:4, c=2,"aa"=10,a,deparse.level = 1) # 后三行有标签
rbind(1:4, c=2,"aa"=10,a,deparse.level = 2) # 全部都有标签
cbind(1:4, c=2,"aa"=10,a,deparse.level = 2) # 列合并1
2head(iris) # 查看前6行
tail(iris , n=3) # 查看后3行
第3章 数据清理和转换
数据清理
缺失值的处理
which() 函数的用法: 1
2which(x, arr.ind = FALSE, ...)
SSEC <- na.omit(SSEC) # 删除空缺的数据1
as.Date(x, format="", tz="")